国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

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

0
分享至


這是第455篇UWA技術(shù)知識(shí)分享的推送,精選了UWA社區(qū)、UWA AI問答的熱門話題等技術(shù)知識(shí)點(diǎn),助力大家更全面地掌握和學(xué)習(xí)。

UWA社區(qū)主頁(yè):community.uwa4d.com

UWA QQ群:793972859

本期目錄:

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

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

From UWA AI 問答

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

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

1. 使用[Preserve]與強(qiáng)制AOT初始化避免反射GC

IL2CPP環(huán)境下,由于AOT編譯限制,ProtoBuf生成代碼中的泛型反射方法可能未被提前編譯,導(dǎo)致運(yùn)行時(shí)嘗試動(dòng)態(tài)調(diào)用而崩潰或觸發(fā)大量GC。為確保所有必要的反射初始化代碼被保留:

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


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

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

2. 避免字符串與值類型裝箱,實(shí)現(xiàn)0GC解析輔助

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

  • 全局復(fù)用StringBuilder用于格式化輸出。

  • 對(duì)數(shù)字字段轉(zhuǎn)字符串時(shí),采用無GC的NumberFormatter.NumberToString(ref char[] buffer, int value)方式,將結(jié)果寫入預(yù)分配字符數(shù)組。

  • 自定義IFormatter 實(shí)現(xiàn),繞過裝箱操作,直接處理基本類型。

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

對(duì)于高頻解析場(chǎng)景(如網(wǎng)絡(luò)同步),考慮繞過完整反序列化流程,直接讀取字節(jié)流中的關(guān)鍵字段:

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

這種方式跳過對(duì)象構(gòu)建開銷,適用于只關(guān)心部分?jǐn)?shù)據(jù)的輕量級(jí)更新。

4. 緩沖池管理Message實(shí)例

頻繁創(chuàng)建/銷毀ProtoBuf對(duì)象會(huì)加劇GC壓力。建議使用對(duì)象池緩存常用Message實(shí)例:

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); }
}

結(jié)合Clear()重置狀態(tài)后復(fù)用,顯著降低內(nèi)存分配頻率。

綜上,核心策略是:強(qiáng)制AOT初始化 + 禁止代碼剝離 + 復(fù)用緩沖區(qū) + 裁剪不必要的反序列化流程。這些方法已在多個(gè)上線項(xiàng)目中驗(yàn)證,能有效將ProtoBuf相關(guān)GC降至接近零。

分享鏈接 :

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

From問答社區(qū)

Q:最近在優(yōu)化貼圖內(nèi)存,請(qǐng)問有沒有開源庫(kù)或者計(jì)算方法,可以檢測(cè)貼圖在屏幕上的占比情況?

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

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/

歡迎大家轉(zhuǎn)至社區(qū)交流

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

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

封面圖來源于網(wǎng)絡(luò)

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

UWA官網(wǎng):www.uwa4d.com

UWA社區(qū):community.uwa4d.com

UWA學(xué)堂:edu.uwa4d.com

點(diǎn)擊下方名片關(guān)注我們,將我設(shè)為星標(biāo),及時(shí)接收小編每日推送哦,性能優(yōu)化不迷路~

近期精彩回顧

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

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.

相關(guān)推薦
熱點(diǎn)推薦
伊朗最高領(lǐng)袖,“最詳細(xì)傷情”披露

伊朗最高領(lǐng)袖,“最詳細(xì)傷情”披露

中國(guó)新聞周刊
2026-04-30 16:23:05
珠海風(fēng)云,千億國(guó)資帝國(guó)虧空迷局

珠海風(fēng)云,千億國(guó)資帝國(guó)虧空迷局

栗滴財(cái)經(jīng)
2026-04-30 18:22:14
被困霍爾木茲海峽的部分船員已遇難!聯(lián)合國(guó)呼吁緊急營(yíng)救

被困霍爾木茲海峽的部分船員已遇難!聯(lián)合國(guó)呼吁緊急營(yíng)救

閃電新聞
2026-04-30 14:56:57
英國(guó)國(guó)王查爾斯給特朗普送了鐘,還“貼臉開大”!

英國(guó)國(guó)王查爾斯給特朗普送了鐘,還“貼臉開大”!

新民周刊
2026-04-30 18:45:52
陜西男子3次報(bào)警,民警拒不派警,致兩家四口被殺,法院咋判的?

陜西男子3次報(bào)警,民警拒不派警,致兩家四口被殺,法院咋判的?

就一點(diǎn)
2026-04-29 17:28:35
南海軍演,全世界開始講道理了

南海軍演,全世界開始講道理了

智先生
2026-04-30 21:36:25
霸王茶姬“水銀門”被通報(bào),網(wǎng)友:好歹毒的商戰(zhàn)!

霸王茶姬“水銀門”被通報(bào),網(wǎng)友:好歹毒的商戰(zhàn)!

廣告創(chuàng)意
2026-04-30 15:43:46
美日菲“肩并肩2016”演習(xí)提前結(jié)束,主要是中國(guó)圍觀艦艇太強(qiáng)

美日菲“肩并肩2016”演習(xí)提前結(jié)束,主要是中國(guó)圍觀艦艇太強(qiáng)

三叔的裝備空間
2026-04-30 11:25:21
孫楊私生子風(fēng)波升級(jí),處處忍讓的張豆豆,終究不再顧及所謂體面

孫楊私生子風(fēng)波升級(jí),處處忍讓的張豆豆,終究不再顧及所謂體面

一盅情懷
2026-04-30 15:59:37
“開除韓國(guó)瑜”風(fēng)暴升級(jí),季麟連被逼道歉辭職,鄭麗文被圍攻逼宮

“開除韓國(guó)瑜”風(fēng)暴升級(jí),季麟連被逼道歉辭職,鄭麗文被圍攻逼宮

共工之錨
2026-04-30 13:27:18
擁抱人民幣果然是個(gè)幌子,阿聯(lián)酋要跟美國(guó)一起掀桌子了

擁抱人民幣果然是個(gè)幌子,阿聯(lián)酋要跟美國(guó)一起掀桌子了

混沌錄
2026-04-30 22:01:15
一女子舉報(bào)身為公職人員的前男友索賄 當(dāng)事人稱系借款 紀(jì)委監(jiān)委已展開調(diào)查

一女子舉報(bào)身為公職人員的前男友索賄 當(dāng)事人稱系借款 紀(jì)委監(jiān)委已展開調(diào)查

紅星新聞
2026-04-30 15:20:27
朝鮮展示在俄烏戰(zhàn)場(chǎng)繳獲的西方武器,包括“豹”-2、M1A1“艾布拉姆斯”坦克!普京:銘記俄朝士兵并肩作戰(zhàn)的英勇事跡

朝鮮展示在俄烏戰(zhàn)場(chǎng)繳獲的西方武器,包括“豹”-2、M1A1“艾布拉姆斯”坦克!普京:銘記俄朝士兵并肩作戰(zhàn)的英勇事跡

每日經(jīng)濟(jì)新聞
2026-04-30 21:50:12
重慶官二代、“紅頂女律師”彭靜失聯(lián),或涉政商利益輸送鏈漩渦!

重慶官二代、“紅頂女律師”彭靜失聯(lián),或涉政商利益輸送鏈漩渦!

兵叔評(píng)說
2026-04-30 16:54:27
浙江男子花860萬(wàn)買了套排屋,收房時(shí)傻眼,院子里有一個(gè)“凸起”,業(yè)主:跟老家的廁所一樣,開發(fā)商:不利因素已公示

浙江男子花860萬(wàn)買了套排屋,收房時(shí)傻眼,院子里有一個(gè)“凸起”,業(yè)主:跟老家的廁所一樣,開發(fā)商:不利因素已公示

極目新聞
2026-04-30 10:33:16
孫楊他媽是嫌孫楊“涼”得還不夠徹底嗎?

孫楊他媽是嫌孫楊“涼”得還不夠徹底嗎?

蔥哥說
2026-04-30 21:24:28
十年來年輕人口減半:北京為什么越來越留不住年輕人了?

十年來年輕人口減半:北京為什么越來越留不住年輕人了?

阜成門六號(hào)院
2026-04-30 18:27:12
許家印都不敢這么干啊!五糧液,瘋狂改業(yè)績(jī)

許家印都不敢這么干?。∥寮Z液,瘋狂改業(yè)績(jī)

說財(cái)貓
2026-04-30 22:18:27
尿酸危機(jī),席卷中國(guó)

尿酸危機(jī),席卷中國(guó)

DT商業(yè)觀察
2026-04-29 11:59:38
致敬帕勒莫!維尼修斯6分鐘內(nèi)罰丟3個(gè)點(diǎn)球,球迷看傻眼了

致敬帕勒莫!維尼修斯6分鐘內(nèi)罰丟3個(gè)點(diǎn)球,球迷看傻眼了

仰臥撐FTUer
2026-04-30 21:41:06
2026-05-01 07:32:49
侑虎科技UWA incentive-icons
侑虎科技UWA
游戲/VR性能優(yōu)化平臺(tái)
1571文章數(shù) 987關(guān)注度
往期回顧 全部

科技要聞

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

頭條要聞

英國(guó)國(guó)王給特朗普送了口鐘 還貼臉開大"有需要盡管敲"

頭條要聞

英國(guó)國(guó)王給特朗普送了口鐘 還貼臉開大"有需要盡管敲"

體育要聞

季后賽場(chǎng)均5.4分,他憑啥在騎士打首發(fā)?

娛樂要聞

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

財(cái)經(jīng)要聞

易會(huì)滿被“雙開”!

汽車要聞

專訪捷途汪如生:捷途雙線作戰(zhàn) 全球化全面落地

態(tài)度原創(chuàng)

家居
健康
親子
數(shù)碼
公開課

家居要聞

靈動(dòng)實(shí)用 生活藝術(shù)場(chǎng)

干細(xì)胞治燒燙傷面臨這些“瓶頸”

親子要聞

接不到活的月嫂越來越多

數(shù)碼要聞

機(jī)械革命耀世18 Pro游戲本270HX Plus + 5070 12GB,10499元

公開課

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

無障礙瀏覽 進(jìn)入關(guān)懷版