在C#程序中,什么是ThePreStub?

时间:2013-10-21 15:34:51

标签: c# profiling

在分析C#应用程序时,我发现在称为“ThePreStub”的系统(?)方法中有相当多的CPU使用率。这是什么?

1 个答案:

答案 0 :(得分:19)

请参阅:CLR Inside out - The Performance Benefits of NGen.

  

NGen编译代码的吞吐量低于JIT编译代码的吞吐量   代码主要有一个原因:交叉汇编引用。在   JIT编译的代码,交叉汇编引用可以实现为   直接调用或跳转,因为这些引用的确切地址   在运行时已知。对于静态编译的代码,然而,   跨程序集引用需要通过一个跳转槽来获取   通过执行方法在运行时填充正确的地址   预存根。方法预存根确保了(除其他外)   加载由该方法引用的程序集的本机映像   在执行方法之前进入内存。预存根只需要   在第一次调用方法时执行;它是   为后续电话短路。但是,每一次   调用方法,交叉程序集引用确实需要经过一个   间接的程度。这主要是占5-10的原因   与之相比,NGen编译代码的吞吐量下降百分比   JIT编译的代码。