2017-06-01 93 views
0

爲什麼CLR需要JIT編譯器編譯IL機器代碼時,它有NGEN,這是在安裝時工作。爲什麼JIT如果我們有NGEN

還有一個問題,JIT如何編譯IL如果它已經是NGENed?

回答

3
  • 因爲很多應用程序沒有被「安裝」,並且沒有使用NGEN需要的結構;它們只是文件的存儲設備上(或純粹在存儲器中,如果從外部源加載)
  • 因爲NGEN是依賴於硬件和硬件可以變化一臺機器的壽命
  • 期間因爲JIT本身可以是因爲應用程序使用諸如插件和擴展點之類的東西;因此,因爲許多應用程序使用元編程在運行時爲其自身發出優化代碼(基於確切條件(它可能是外部數據,直到它在運行時實際調用時纔會知道),但是所有內容都可能不可用奧姆斯地圖數據庫列的對象,例如)
  • ,因爲在很多情況下,它是不值得NGEN的開銷 - 它不會改善的事情

當NGEN或AOT是一個不錯的選擇:很好,去做那個。但它不是解決所有問題的魔杖。

還有一個問題,如果JIT已經NGENed了,怎麼會編譯IL代碼呢?

假設NGEN圖像的所有先決條件都是完美匹配的,那麼JIT就不需要涉及。

1

This post有一些解釋爲什麼NGEN可能不如聽起來那麼有吸引力。

here有很多老建議微軟何時使用NGEN

還有一個問題,JIT如果它已經NGENed如何編譯IL代碼?

如果運行時決定需要重新編譯 - 它將完全忽略NGENed圖像。

相關問題