C#的可执行程序每一次运行时都要进行即时编译吗?注是指完全退出程序后再次执行这个EXE文件还要对IL进行即时编译为本地代码吗? 有篇文章这么说内容如下:
再次调用该方法?
  在一个程序中,我们经常反复调用同一个方法,当再次调用该方法时就不需要重复进行验证了,可以直接调用内存块中已有的本地代码,完全跳过JITCompile函数的验证和编译过程。所以同一方法只有在第一次调用时会产生一些性能损失,后续调用就可以全速进行了。
  关闭程序?
  由于编译器将本地代码保存在动态内存中,所以关闭程序时本地代码将发生丢失。当再次启动程序或者同时运行程序的两个实例时,JIT编译器将再次将IL代码编译为本地指令。
 有个网友又说不用再次编译为本地指令,他是这么说:
公共语言运行库支持一种提前编译模式。此提前编译模式使用本机映像生成器 (Ngen.exe) 将 MSIL 程序集转换为本机代码,其作用与 JIT 编译器极为相似。但是,Ngen.exe 的操作与 JIT 编译器的操作有三点不同:它在应用程序运行之前而不是运行过程中执行从 MSIL 到本机代码的转换。它一次编译一个整个的程序集,而不是一次编译一个方法。它将本机映像缓存中生成的代码以文件的形式持久保存在磁盘上。现在我也不知道哪个正确答案!