美文网首页
【ILR】ILRuntime优化记录

【ILR】ILRuntime优化记录

作者: 卅云川 | 来源:发表于2023-05-08 18:52 被阅读0次

    [CPU] 减少ILRuntime内的Update

    受限于ILRuntime的运行效率,不建议在ILRuntime中进行大量的Update运算。如果项目需要,也应首先考虑将性能热点代码尽量放在主工程内,由ILRuntime调用主工程内的代码。

    [CPU] 减少主工程对ILRuntime内方法的调用数量

    这一点在Update上较明显。如果ILRuntime中有大量Update且分散在项目内各处由主工程调用,可以考虑将ILRuntime中所有的Update方法集中在一处,然后由主工程统一调用,可带来客观的性能收益(主要体现在CPU上)。

    [GC] 尽量避免ILRuntime中持有主工程内的值类型

    以Unity的Vector3举例,当ILRuntime中的某个类的实例持有Vector3的变量,那么当修改这个变量时,IL代码调用的是stfld指令,该指令在ILInterpreter中解析时会直接调用值绑定中的AssignFromStack方法,并在保存时产生装箱,将Vector3转换为object存入managedObjs数组。

    [GC] ILRuntime尽量不要调用主工程内参数是枚举的方法

    当ILRuntime调用此类方法时,传入的参数虽然是枚举,是值类型,但是我们生成的绑定代码会在内部将该枚举值进行装箱,产生GC

    [GC] ILRuntime中不要用Dictionary去循环

    在ILRuntime中对Dictionary循环会产生大量GC,因为它的循环需要使用Enumerator,且对它的调用都会在绑定代码中产生大量GC。如果这个循环放到了Update中,那将是灾难性的

    [GC] ILRuntime中的循环不要使用foreach

    使用foreach对以List、Dictionary这些实现了IEnumerable的类进行的遍历操作,在原生的C#中也会产生GC,而ILRuntime中这些操作的GC会被放大,所以最好不要使用foreach进行循环,可以使用for。Dictionary建议如上一条,不要遍历,如有需要可考虑是否有折中的办法

    相关文章

      网友评论

          本文标题:【ILR】ILRuntime优化记录

          本文链接:https://www.haomeiwen.com/subject/muplsdtx.html