JIT和程序的首次执行

因为C#源代码通过编译器编译生成的是IL代码,而IL是与CPU无关的机器语言。所以当程序运行于特定的CPU时,首先必须将IL转换成本地CPU指令,这正是JIT(Just-In-Time)编译器的任务、职责。服务器

当程序中某个具体的方法首次被调用的时候,JIT主要会执行如下步骤:工具

  • 找到该方法的IL
  • 将IL编译成优化过的本地CPU指令并保存到一个动态分配的内存中
  • 执行生成的本地指令并返回

因为第一次调用会通过编译和优化等步骤,因此会有必定的性能损失。可是之后对该方法的调用会以本地代码的形式全速运行。性能

若是您认为这些性能损失不容忽视,能够使用NGen.exe工具来将应用程序的IL代码编译成本地代码。而后,每当CLR加载程序集时,都会检查是否存在一个对应的、因为NGen生成的本地文件。若是找不到,CLR就会像往常同样对IL进行JIT编译。然而,若是存在一个对应的本地文件,CLR直接使用本地文件中编译好的代码。可是对于服务器应用程序而言,NGen.exe的做用并不明显,有时甚至毫无用处,加上NGen.exe有一些其余的缺点,所以应当谨慎使用!优化

相关文章
相关标签/搜索