22.性能优化相关

22.性能相关-性能优化相关


22.1 知识点

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

  1. 热更工程生成的DLL包使用Release编译生成。
  2. 在Unity编辑器中的执行效率会低于真机,内存占用也会相差数倍,建议在真机测试性能和内存。
  3. 打包时不要勾选Development Build(开发构建),若勾选打包后真机测试效率会较低。
  4. 如果是IL2CPP打包,在PlayerSetting中的Other Setting中需要将C++ Compiler Configuration(C++编译器配置)设置为Release,否则效率较低(Unity2018以后)。

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

  1. 一定要进行CLR绑定,可以大幅提升性能表现。
  2. 一定要注册值类型绑定。
  3. 在ILRuntime中不要频繁使用foreach,它会加大开销。
  4. 热更调用主工程的开销小于主工程调用热更的开销。
  5. 主工程调用热更工程函数时,尽量使用BeginInvoke的形式(无GC Alloc方式)。
  6. 要合理规划热更部分和非热更部分,因为热更部分的内容效率肯定是比不上原生执行的。
    • 不要想着所有代码都做成热更代码,这样效率肯定会受到影响。
    • 消耗较大的独立算法(比如寻路算法等)应写在主工程中供热更使用。
    • 稳定不变的独立模块(比如网络通讯模块等)应写在主工程中供热更使用。
  7. 使用ILRuntime2.0新加入的寄存器模式优化计算密集的内容,优化性能。

如何排查性能问题

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

可选的优化方案

  1. ILRuntime中方法的第一次执行会有额外开销,我们可以通过ILRuntime提供的预热加载功能解决。
    • appDomain.Prewarm(类名或指定方法),比如放到IlruntimeManage的InitILRuntime最后。
  2. 编辑器中有每次额外的内存开销,我们可以定义DISABLE_ILRUNTIME_DEBUG宏来避免,但是会失去断点调试和行号报告功能。
  3. 正式发布时,我们不需要获取调试相关信息,可以选择不加载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

×

喜欢就点赞,疼爱就打赏