因爲C#源代碼通過編譯器編譯生成的是IL代碼,而IL是與CPU無關的機器語言。所以當程序運行於特定的CPU時,首先必須將IL轉換成本地CPU指令,這正是JIT(Just-In-Time)編譯器的任務、職責。服務器
當程序中某個具體的方法首次被調用的時候,JIT主要會執行如下步驟:工具
因爲第一次調用會通過編譯和優化等步驟,因此會有必定的性能損失。可是之後對該方法的調用會以本地代碼的形式全速運行。性能
若是您認爲這些性能損失不容忽視,能夠使用NGen.exe工具來將應用程序的IL代碼編譯成本地代碼。而後,每當CLR加載程序集時,都會檢查是否存在一個對應的、因爲NGen生成的本地文件。若是找不到,CLR就會像往常同樣對IL進行JIT編譯。然而,若是存在一個對應的本地文件,CLR直接使用本地文件中編譯好的代碼。可是對於服務器應用程序而言,NGen.exe的做用並不明顯,有時甚至毫無用處,加上NGen.exe有一些其餘的缺點,所以應當謹慎使用!優化