網易首頁 > 網易號 > 正文 申請入駐

【厚積薄發】如何解決ProtoBuf反序列化中GC高的問題

0
分享至


這是第455篇UWA技術知識分享的推送,精選了UWA社區、UWA AI問答的熱門話題等技術知識點,助力大家更全面地掌握和學習。

UWA社區主頁:community.uwa4d.com

UWA QQ群:793972859

本期目錄:

  • 如何解決ProtoBuf反序列化中的GC高的問題

  • 如何在編輯器中集成實時查看Mipmap使用層級工具

From UWA AI 問答

Q:有沒有比較好的解決ProtoBuf反序列化GC的方案?

A:在Unity項目中,使用ProtoBuf進行反序列化時產生的GC主要來源于兩方面:內存分配的臨時對象(如字符串、裝箱操作)和反射機制的低效調用。以下是針對這些問題的成熟且高效的解決方案。

1. 使用[Preserve]與強制AOT初始化避免反射GC

IL2CPP環境下,由于AOT編譯限制,ProtoBuf生成代碼中的泛型反射方法可能未被提前編譯,導致運行時嘗試動態調用而崩潰或觸發大量GC。為確保所有必要的反射初始化代碼被保留:

using Google.Protobuf.Reflection;
using UnityEngine.Scripting;


[Preserve]
private void ForceReflectionInitialization()
{
// 顯式調用每個消息類型的ForceReflectionInitialization
FileDescriptor.ForceReflectionInitialization ();
FileDescriptor.ForceReflectionInitialization ();
// 添加所有用到的消息類型
}

此方法無需調用,僅需存在即可被鏈接器保留。配合[Preserve]特性防止代碼剝離,可有效解決因AOT缺失導致的異常及性能損耗。

2. 避免字符串與值類型裝箱,實現0GC解析輔助

參考TMP文本優化思路,可對ProtoBuf解析過程中的輸出處理進行定制,減少中間對象分配。例如,在自定義的日志系統或UI更新中直接復用StringBuilder寫入,而非通過ToString()創建新字符串。

  • 全局復用StringBuilder用于格式化輸出。

  • 對數字字段轉字符串時,采用無GC的NumberFormatter.NumberToString(ref char[] buffer, int value)方式,將結果寫入預分配字符數組。

  • 自定義IFormatter 實現,繞過裝箱操作,直接處理基本類型。

3. 使用原生字節訪問替代高開銷API

對于高頻解析場景(如網絡同步),考慮繞過完整反序列化流程,直接讀取字節流中的關鍵字段:

// 使用CodedInputStream直接讀取特定字段
var input = CodedInputStream.CreateInstance(data);
while (!input.IsAtEnd)
{
var tag = input.ReadTag();
switch (tag.FieldNumber)
{
case 1:
int hp = input.ReadInt32();
break;
// 只解析必要字段
}
}

這種方式跳過對象構建開銷,適用于只關心部分數據的輕量級更新。

4. 緩沖池管理Message實例

頻繁創建/銷毀ProtoBuf對象會加劇GC壓力。建議使用對象池緩存常用Message實例:

public class MessagePool where T : IMessage, new()
{
private static readonly Stack _pool = new();

public static T Get() => _pool.Count > 0 ? _pool.Pop() : new T();

public static void Release(T msg) { _pool.Push(msg); }
}

結合Clear()重置狀態后復用,顯著降低內存分配頻率。

綜上,核心策略是:強制AOT初始化 + 禁止代碼剝離 + 復用緩沖區 + 裁剪不必要的反序列化流程。這些方法已在多個上線項目中驗證,能有效將ProtoBuf相關GC降至接近零。

分享鏈接 :

https://www.uwa4d.com/main/uwa-shared.html?shareId=228136d0-985e-4af9-8c83-f84b04834677

From問答社區

Q:最近在優化貼圖內存,請問有沒有開源庫或者計算方法,可以檢測貼圖在屏幕上的占比情況?

比如,一張1024的貼圖,如果渲染時一直使用很高層級的Mipmap,就說明其實不需要1024這么高的分辨率。我記得有種工具還能通過顏色可視化,我主要想集成在編輯器里面實時查看修改。

A:URP里面編寫Mipmap工具可以參考以下鏈接:

Scene View Debug Modes in the Unity URP


https://johnaustin.io/articles/2021/scene-view-debug-modes-in-the-unity-urp

A way to visualize mip levels


https://aras-p.info/blog/2011/05/03/a-way-to-visualize-mip-levels/

歡迎大家轉至社區交流

https://answer.uwa4d.com/question/6925280c682c7e5cd61bfb76

無論是社區里開發者們的互助討論,還是AI基于知識沉淀的快速反饋,核心都是為了讓每一個技術難題都有解、每一次踩坑都有回響。本期分享分別來自UWA AI問答和UWA問答社區,希望這些從真實開發場景中提煉的經驗,能直接幫你解決當下的技術卡點,也讓你在遇到同類問題時,能更高效地找到破局方向。

封面圖來源于網絡

今天的分享就到這里。生有涯而知無涯,在漫漫的開發周期中,我們遇到的問題只是冰山一角,UWA社區愿伴你同行,一起探索分享。歡迎更多的開發者加入UWA社區。

UWA官網:www.uwa4d.com

UWA社區:community.uwa4d.com

UWA學堂:edu.uwa4d.com

點擊下方名片關注我們,將我設為星標,及時接收小編每日推送哦,性能優化不迷路~

近期精彩回顧

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
車越造越大,我被卡在停車位出不來了......

車越造越大,我被卡在停車位出不來了......

樓市前線
2026-04-27 21:26:22
CCTV5乒乓直播:4月30日國乒出戰,今日中國德比戰

CCTV5乒乓直播:4月30日國乒出戰,今日中國德比戰

米師傅安裝
2026-04-30 11:48:32
日本“一天一頓飯”!求助無門,開始呼叫中國?

日本“一天一頓飯”!求助無門,開始呼叫中國?

混沌錄
2026-04-29 19:36:05
樊振東威力大!WTT公布去年財報,巨虧近一億,稱頂級運動員退賽

樊振東威力大!WTT公布去年財報,巨虧近一億,稱頂級運動員退賽

劉哥談體育
2026-04-30 18:28:33
涉嫌嚴重違紀違法,歐陽邦輝被查

涉嫌嚴重違紀違法,歐陽邦輝被查

都市快報橙柿互動
2026-04-30 13:44:11
統一臺灣后,第一任省長由誰擔任最合適?五人上榜,一人脫穎而出

統一臺灣后,第一任省長由誰擔任最合適?五人上榜,一人脫穎而出

知鑒明史
2026-04-24 20:05:03
朝鮮戰爭期間:美軍原來已接近擊敗中國,卻碰上中國決死的指揮官

朝鮮戰爭期間:美軍原來已接近擊敗中國,卻碰上中國決死的指揮官

愿你余生安好嘴角帶笑
2026-04-29 14:18:14
5月上旬,錢袋子越來越鼓,財運持續攀升的三個星座,富貴綿延

5月上旬,錢袋子越來越鼓,財運持續攀升的三個星座,富貴綿延

小晴星座說
2026-04-30 19:15:20
遼寧省交投集團原董事長被帶走調查

遼寧省交投集團原董事長被帶走調查

地產微資訊
2026-04-30 14:26:19
蘇提達王后罕秀恩愛,牽手七旬泰王閃耀斯德哥爾摩皇宮,又美又甜

蘇提達王后罕秀恩愛,牽手七旬泰王閃耀斯德哥爾摩皇宮,又美又甜

八八尚語
2026-04-30 11:32:22
菲方稱“來自中方船只的瓶罐”含有劇毒,國防部:賊喊捉賊

菲方稱“來自中方船只的瓶罐”含有劇毒,國防部:賊喊捉賊

北青網-北京青年報
2026-04-30 19:25:01
迪馬利亞:穆里尼奧在更衣室連C羅都敢噴,他是天才也是“瘋子”

迪馬利亞:穆里尼奧在更衣室連C羅都敢噴,他是天才也是“瘋子”

夏侯看英超
2026-04-29 23:12:46
女雙NO.1險翻車!圣壇鏖戰3局拒絕逆轉,國羽尤杯2-0,陳雨菲登場

女雙NO.1險翻車!圣壇鏖戰3局拒絕逆轉,國羽尤杯2-0,陳雨菲登場

劉姚堯的文字城堡
2026-04-30 18:45:08
廣東3消息!張明池力撐杜鋒,徐昕與朱芳雨暢談,外教有望頂上

廣東3消息!張明池力撐杜鋒,徐昕與朱芳雨暢談,外教有望頂上

多特體育說
2026-04-30 10:31:21
退休了才是真正的生意開始:一個國企老總的213%年息傳奇

退休了才是真正的生意開始:一個國企老總的213%年息傳奇

有戲
2026-04-30 12:42:39
普拉多車主沉默了!新H9只賣17.49萬,機械素質幾乎一樣

普拉多車主沉默了!新H9只賣17.49萬,機械素質幾乎一樣

念寒車評
2026-04-29 10:44:37
斯大林和蘇軍總結朝戰:最大的失誤,是以為志愿軍不如朝鮮人民軍

斯大林和蘇軍總結朝戰:最大的失誤,是以為志愿軍不如朝鮮人民軍

云霄紀史觀
2026-04-29 20:09:55
那個被楊潔導演一眼相中的15歲初中生,后來怎么就“消失”了?

那個被楊潔導演一眼相中的15歲初中生,后來怎么就“消失”了?

小椰的奶奶
2026-04-20 11:39:42
“困難老人”家里擺五糧液?江蘇一社區回應:確實不困難

“困難老人”家里擺五糧液?江蘇一社區回應:確實不困難

虔青
2026-04-30 13:45:49
博主稱249元毛巾有暴利,胖東來:將公示毛利并起訴該博主

博主稱249元毛巾有暴利,胖東來:將公示毛利并起訴該博主

映射生活的身影
2026-04-29 18:16:29
2026-04-30 20:08:49
侑虎科技UWA incentive-icons
侑虎科技UWA
游戲/VR性能優化平臺
1571文章數 987關注度
往期回顧 全部

科技要聞

9000億美元估值,Anthropic即將反超OpenAI

頭條要聞

大連男子2859.2克黃金被扣押30年 最新進展來了

頭條要聞

大連男子2859.2克黃金被扣押30年 最新進展來了

體育要聞

季后賽場均5.4分,他憑啥在騎士打首發?

娛樂要聞

孫楊博士學歷有問題?官方含糊其辭

財經要聞

易會滿被“雙開”!

汽車要聞

專訪捷途汪如生:捷途雙線作戰 全球化全面落地

態度原創

藝術
教育
本地
健康
公開課

藝術要聞

安東·愛德華·基爾德魯普:19世紀丹麥風景畫家

教育要聞

孩子到底能不能打?如何更科學地打孩子?從4維空間深入解讀

本地新聞

用青花瓷的方式,打開西溪濕地

干細胞治燒燙傷能用了么?

公開課

李玫瑾:為什么性格比能力更重要?

無障礙瀏覽 進入關懷版