- 三個核心問題
- 選用哪個版本?爲什麼不選擇Google.ProtoBuf?
- 能否支持IL2CPP的AOT?
- 使用Dll還是使用源碼?
- 問題一:選用哪個版本?爲什麼不選擇Google.ProtoBuf?
- 選擇最新版本,但是要手動編譯源碼。
- 不使用Precomplie,主要原因是Precomplie目前只支持Windows系統,Mac出包機無法使用,打斷了自動化流程。
- Protobuf-net經過N個著名大型上線項目驗證,穩定性和可靠性強;目前僅發現某款二次元遊戲採用了Google.ProtoBuf。
- 問題二:能否支持IL2CPP的AOT?
- 著名的r668版本和從Nuget上下載的新版本不支持AOT,需要手動編譯源碼,去掉帶動態類型生成的宏。
- 問題三:使用Dll還是使用源碼?
- 建議使用Dll,源碼採用了一些高版本C#語法,一些.Net2.0運行時的項目不支持。
- 使用Dll有一個注意事項,由於IL2CPP會裁剪Dll中的Attribute的Get方法,會導致反序列化失敗,因此需要使用link.xml進行裁剪規避。
- 其他問題:
- 要不要根據Schama生成C#代碼?這個要根據項目來,可以手動加Attribute,也可以自動生成,自動生成主要用在和導出給服務器、Lua。
- 不使用Precomplie和Emit,那麼性能如何?性能確實一般,對於中小型項目來說夠用了,對於性能敏感的項目可以使用ZeroFormatter和MsgPack,這兩種採用了Lazy加載的機制,很多類型用到時纔會進行反序列化,無需初始全部反序列化,佔用的內存更小。
Unity中使用ProtoBuf-net的正確姿勢
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.