我正在使用 PerfView 来调整应用程序,第二个最昂贵的项目目前被标记为:
其他 < < clr!JIT_New >>
超过 10% 的 CPU。即使对于测试用例的后续运行,这种情况也会继续。
谁能确定哪些活动或代码实践可能导致需要 JIT-ting 的新代码的动态生成?
我正在使用 PerfView 来调整应用程序,第二个最昂贵的项目目前被标记为:
其他 < < clr!JIT_New >>
超过 10% 的 CPU。即使对于测试用例的后续运行,这种情况也会继续。
谁能确定哪些活动或代码实践可能导致需要 JIT-ting 的新代码的动态生成?
JIT_New() 是 CLR 中的一个辅助函数,每当您使用new运算符在代码中创建新对象时都会运行该函数。它只是从垃圾收集堆中分配内存并调用类构造函数。或者换句话说,它实现了 Opcodes.Newobj IL 指令。它的名字有点令人困惑,它与 jitting 你的代码没有任何关系。只是一个jitter知道的辅助函数,它将对这个辅助函数的调用直接编译成生成的机器代码。JIT_Newarr1() 将是您遇到的另一个,它分配一个数组。
我不知道 PerfView,请注意 JIT_New() 的执行时间可能包括执行垃圾收集所需的时间。当 JIT_New() 运行时 gen#0 堆已满时会发生这种情况。这可以解释很大的百分比,否则 JIT_New() 非常快。您对此无能为力,这是任何托管程序中的固定开销。