- 三个核心问题
- 选用哪个版本?为什么不选择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的正确姿势
最新推荐文章于 2024-04-02 16:30:34 发布