Unity中使用ProtoBuf-net的正確姿勢

  • 三個核心問題
    • 選用哪個版本?爲什麼不選擇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加載的機制,很多類型用到時纔會進行反序列化,無需初始全部反序列化,佔用的內存更小。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章