UH4L17——性能优化相关
UH4L17——性能优化相关
本章代码关键字
1 | appDomain.Prewarm() //提前预热加载某个类或者方法,提高第一次执行时的性能 |
ILRuntime性能测试或打包时的注意事项(设置相关)
如果要进行ILRuntime性能测试,或最终打包,为了达到最好的性能表现,需要注意以下几点
-
热更工程生成的DLL包使用Release编译生成
-
在Unity编辑器中的执行效率会低于真机,内存占用也会相差数倍,建议真机测试性能和内存
-
打包时不要勾选 Development Build(开发构建),若勾选打包后真机测试效率会较低
-
如果是IL2CPP打包,在 PlayerSetting 中 的 Other Setting 中需要将 C++ Compiler Configuration(C++编译器配置)设置为 Release,
否则效率较低(Unity2018以后)
ILRuntime性能测试或打包时的注意事项(代码相关)
如果要进行ILRuntime性能测试,或最终打包,为了达到最好的性能表现,需要注意一下几点
-
一定要进行CLR绑定,可以大幅提升性能表现
-
一定要注册值类型绑定
-
在ILRuntime中不要频繁使用
foreach
,它会加大开销 -
热更调用主工程的开销 小于 主工程调用热更的开销
-
主工程调用热更工程函数时,尽量使用
BeginInvoke
的形式(无GC Alloc方式) -
要合理规划热更部分和非热更部分,因为热更部分的内容,效率肯定是比不上原生执行的
- 不要想着所有代码都做成热更代码,这样效率肯定会受到影响
- 消耗较大的独立算法(比如寻路算法等),应写在主工程中供热更使用
- 稳定不变的独立模块(比如网络通讯模块等),应写在主工程中供热更使用
-
使用 ILRuntime2.0 新加入的寄存器模式优化计算密集的的内容,优化性能
如何排查性能问题
通过Profiler性能调试窗口来排查性能问题(ILRuntime加入了Profiler支持)
可选的优化方案
-
ILRuntime中方法的第一次执行会有额外开销,我们可以通过ILRuntime提供的预热加载功能解决,
appDomain.Prewarm(类名或指定方法)
-
编辑器中有每次额外的内存开销,我们可以定义
DISABLE_ILRUNTIME_DEBUG
宏来避免,但是会失去 断点调试 和 行号报告 功能
-
正式发布时,我们不需要获取调试相关信息,我们可以选择不加载pdb文件,以节省更多内存