当我安装.NET应用程序时,我知道它会被jitted。我的问题是每次运行此应用程序时是否会发生这种情况,或者只是第一次发生?如果它只是第一次发生,我在哪里可以找到这个应用程序的jitted版本?
答案 0 :(得分:2)
根据需要,组件可以零碎地进行。你的问题似乎暗示整个应用程序是jit编译的。这不是发生的事情。在任何特定时刻进行过咬合的部件都在记忆中。
JIT编译考虑到某些代码可能永远不会的事实 在执行期间被调用。而不是使用时间和记忆 将可移植可执行(PE)文件中的所有MSIL转换为本机 代码,它在执行期间根据需要转换MSIL并存储 在内存中生成本机代码,以便可以访问它 在该过程的上下文中的后续调用。加载器创建 并在加载类型时将存根附加到类型中的每个方法 并初始化。当第一次调用方法时,存根 将控制传递给JIT编译器,JIT编译器为此转换MSIL 将方法转换为本机代码并修改存根以直接指向 生成本机代码。后续调用JIT编译的方法 因此,直接进入本机代码。
它不会改变您的问题的答案,但there are some differences in how the JIT compilation happens with .NET 4.5。在多核处理器上,线程的任务是在实际调用方法之前编译它们。
答案 1 :(得分:1)