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