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文件,以节省更多内存