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加载的机制,很多类型用到时才会进行反序列化,无需初始全部反序列化,占用的内存更小。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章