22.性能相关-性能优化相关
22.1 知识点
ILRuntime性能测试或打包时的注意事项(设置相关)
- 热更工程生成的DLL包使用Release编译生成。
- 在Unity编辑器中的执行效率会低于真机,内存占用也会相差数倍,建议在真机测试性能和内存。
- 打包时不要勾选Development Build(开发构建),若勾选打包后真机测试效率会较低。
- 如果是IL2CPP打包,在PlayerSetting中的Other Setting中需要将C++ Compiler Configuration(C++编译器配置)设置为Release,否则效率较低(Unity2018以后)。
ILRuntime性能测试或打包时的注意事项(代码相关)
- 一定要进行CLR绑定,可以大幅提升性能表现。
- 一定要注册值类型绑定。
- 在ILRuntime中不要频繁使用foreach,它会加大开销。
- 热更调用主工程的开销小于主工程调用热更的开销。
- 主工程调用热更工程函数时,尽量使用BeginInvoke的形式(无GC Alloc方式)。
- 要合理规划热更部分和非热更部分,因为热更部分的内容效率肯定是比不上原生执行的。
- 不要想着所有代码都做成热更代码,这样效率肯定会受到影响。
- 消耗较大的独立算法(比如寻路算法等)应写在主工程中供热更使用。
- 稳定不变的独立模块(比如网络通讯模块等)应写在主工程中供热更使用。
- 使用ILRuntime2.0新加入的寄存器模式优化计算密集的内容,优化性能。
如何排查性能问题
通过Profiler性能调试窗口来排查性能问题(ILRuntime加入了Profiler支持)。
可选的优化方案
- ILRuntime中方法的第一次执行会有额外开销,我们可以通过ILRuntime提供的预热加载功能解决。
appDomain.Prewarm(类名或指定方法)
,比如放到IlruntimeManage的InitILRuntime最后。
- 编辑器中有每次额外的内存开销,我们可以定义DISABLE_ILRUNTIME_DEBUG宏来避免,但是会失去断点调试和行号报告功能。
- 正式发布时,我们不需要获取调试相关信息,可以选择不加载pdb文件,以节省更多内存。
22.2 练习题
为了保证发布出去的ILRuntime热更项目的最佳性能表现,我们需要注意那些点?(至少答出5点)
设置相关:
- 热更工程生成的DLL包使用Release编译生成
- 在Unity编辑器中的执行效率会低于真机,内存占用也会相差数倍,建议真机测试性能和内存
- 打包时不要勾选Development Build(开发构建),若勾选打包后真机测试效率会较低
- 如果是IL2CPP打包,在PlayerSetting中的Other Setting中需要将C++ Compiler Configuration(C++编译器配置)设置为Release,否则效率较低(Unity2018以后)
代码相关:
- 一定要进行CLR绑定,可以大幅提升性能表现
- 一定要注册值类型绑定
- 在ILRuntime中不要频繁使用foreach,它会加大开销
- 热更调用主工程的开销小于主工程调用热更的开销
- 主工程调用热更工程函数时,尽量使用BeginInvoke的形式(无GC Alloc方式)
- 要合理规划热更部分和非热更部分,因为热更部分的内容,效率肯定是比不上原生执行的
- 使用ILRuntime2.0新加入的寄存器模式优化计算密集的的内容,优化性能
可选方案:
ILRuntime中方法的第一次执行会有额外开销,我们可以通过ILRuntime提供的预热加载功能解决
appDomain.Prewarm(类名或指定方法)
编辑器中有每次额外的内存开销,我们可以定义DISABLE_ILRUNTIME_DEBUG宏来避免,但是会失去断点调试和行号报告功能
正式发布时,我们不需要获取调试相关信息,我们可以选择不加载pdb文件,以节省更多内存
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com