每次运行.NET应用程序时都会发生jitting吗?

时间:2014-11-25 16:34:41

标签: .net .net-4.0 jit ngen

当我安装.NET应用程序时,我知道它会被jitted。我的问题是每次运行此应用程序时是否会发生这种情况,或者只是第一次发生?如果它只是第一次发生,我在哪里可以找到这个应用程序的jitted版本?

2 个答案:

答案 0 :(得分:2)

根据需要,组件可以零碎地进行。你的问题似乎暗示整个应用程序是jit编译的。这不是发生的事情。在任何特定时刻进行过咬合的部件都在记忆中。

  

JIT编译考虑到某些代码可能永远不会的事实   在执行期间被调用。而不是使用时间和记忆   将可移植可执行(PE)文件中的所有MSIL转换为本机   代码,它在执行期间根据需要转换MSIL并存储   在内存中生成本机代码,以便可以访问它   在该过程的上下文中的后续调用。加载器创建   并在加载类型时将存根附加到类型中的每个方法   并初始化。当第一次调用方法时,存根   将控制传递给JIT编译器,JIT编译器为此转换MSIL   将方法转换为本机代码并修改存根以直接指向   生成本机代码。后续调用JIT编译的方法   因此,直接进入本机代码。

Compiling MSIL to Native Code

它不会改变您的问题的答案,但there are some differences in how the JIT compilation happens with .NET 4.5。在多核处理器上,线程的任务是在实际调用方法之前编译它们。

答案 1 :(得分:1)

每次运行它都会发生。 有一个名为ngen 1的工具可以生成应用程序的二进制可执行版本,但它并没有经常使用。

Ngen