clr的原因! JIT_New在PerfView CPU堆栈中

时间:2013-06-04 01:48:49

标签: c# .net performance perfview

我使用PerfView调整应用程序,第二个最昂贵的项目目前标记为:

  

其他< < clr!JIT_New> >

占CPU的10%以上。即使对于后续运行的测试用例,这仍然存在。

任何人都可以确定哪些活动或代码实践可能导致动态生成需要JIT-ting的新代码?

1 个答案:

答案 0 :(得分:11)

JIT_New()是CLR中的一个辅助函数,只要您使用 new 运算符在代码中创建新对象,它就会运行。它只是从垃圾收集堆中分配内存并调用类构造函数。或者换句话说,它实现了Opcodes.Newobj IL指令。它的名字有点令人困惑,它与编写代码没有任何关系。只是一个jitter知道的辅助函数,它将对这个辅助函数的调用直接编译到生成的机器代码中。 JIT_Newarr1()将是您遇到的另一个,它会分配一个数组。

我不知道PerfView,请注意JIT_New()的执行时间可能包括执行垃圾收集所需的时间。当JIT_New()运行时,当#0堆已满时会发生这种情况。这可以解释大百分比,JIT_New()在其他方面非常快。您无能为力,这在任何托管程序中都是固定的开销。