在分析C#应用程序时,我发现在称为“ThePreStub”的系统(?)方法中有相当多的CPU使用率。这是什么?
答案 0 :(得分:19)
请参阅:CLR Inside out - The Performance Benefits of NGen.
NGen编译代码的吞吐量低于JIT编译代码的吞吐量 代码主要有一个原因:交叉汇编引用。在 JIT编译的代码,交叉汇编引用可以实现为 直接调用或跳转,因为这些引用的确切地址 在运行时已知。对于静态编译的代码,然而, 跨程序集引用需要通过一个跳转槽来获取 通过执行方法在运行时填充正确的地址 预存根。方法预存根确保了(除其他外) 加载由该方法引用的程序集的本机映像 在执行方法之前进入内存。预存根只需要 在第一次调用方法时执行;它是 为后续电话短路。但是,每一次 调用方法,交叉程序集引用确实需要经过一个 间接的程度。这主要是占5-10的原因 与之相比,NGen编译代码的吞吐量下降百分比 JIT编译的代码。