UH4L17——性能优化相关

本章代码关键字

1
appDomain.Prewarm()        //提前预热加载某个类或者方法,提高第一次执行时的性能

ILRuntime性能测试或打包时的注意事项(设置相关)

如果要进行ILRuntime性能测试,或最终打包,为了达到最好的性能表现,需要注意以下几点

  1. 热更工程生成的DLL包使用Release编译生成

    image

  2. 在Unity编辑器中的执行效率会低于真机,内存占用也会相差数倍,建议真机测试性能和内存​​

  3. 打包时不要勾选 Development Build(开发构建),若勾选打包后真机测试效率会较低

    image

  4. 如果是IL2CPP打包,在 PlayerSetting 中 的 Other Setting 中需要将 C++ Compiler Configuration(C++编译器配置)设置为 Release,
    否则效率较低(Unity2018以后)

    image

ILRuntime性能测试或打包时的注意事项(代码相关)

如果要进行ILRuntime性能测试,或最终打包,为了达到最好的性能表现,需要注意一下几点

  1. 一定要进行CLR绑定,可以大幅提升性能表现

  2. 一定要注册值类型绑定

  3. 在ILRuntime中不要频繁使用foreach​,它会加大开销

  4. 热更调用主工程的开销 小于 主工程调用热更的开销

  5. 主工程调用热更工程函数时,尽量使用 BeginInvoke​ 的形式(无GC Alloc方式)

  6. 要合理规划热更部分和非热更部分,因为热更部分的内容,效率肯定是比不上原生执行的

    1. 不要想着所有代码都做成热更代码,这样效率肯定会受到影响
    2. 消耗较大的独立算法(比如寻路算法等),应写在主工程中供热更使用
    3. 稳定不变的独立模块(比如网络通讯模块等),应写在主工程中供热更使用
  7. 使用 ILRuntime2.0 新加入的寄存器模式优化计算密集的的内容,优化性能

如何排查性能问题

通过Profiler性能调试窗口来排查性能问题(ILRuntime加入了Profiler支持)

可选的优化方案

  1. ILRuntime中方法的第一次执行会有额外开销,我们可以通过ILRuntime提供的预热加载功能解决,appDomain.Prewarm(类名或指定方法)

  2. 编辑器中有每次额外的内存开销,我们可以定义DISABLE_ILRUNTIME_DEBUG​宏来避免,但是会失去 断点调试 和 行号报告 功能

    image

  3. 正式发布时,我们不需要获取调试相关信息,我们可以选择不加载pdb文件,以节省更多内存