因此,當CLR運行時加載一個.NET程序集時,它會將其編譯到機器本機代碼中。這個過程被稱爲JITing。 NGen也是將.NET程序集編譯爲本地代碼的過程。我不明白兩者有什麼區別?JIT vs NGen - 有什麼區別?
回答
所不同的是當他們發生時。 JIT編譯在程序運行時發生。 NGen通常是在您的程序安裝時完成的,並且在您的程序運行之前發生。 NGen的目標之一是從應用程序啓動中刪除JIT懲罰。
從MSDN ...
機映像生成器(Ngen.exe)是一種工具,提高了管理的應用程序的性能。 Ngen.exe創建本地映像,這些映像是包含編譯的特定於處理器的機器代碼的文件,並將它們安裝到本地計算機上的本機映像緩存中。運行時可以使用緩存中的本機映像,而不是使用即時(JIT)編譯器來編譯原始程序集。
http://msdn.microsoft.com/en-us/library/6t9t5wcf(v=VS.100).aspx
基本上NGEN讓你預先JIT並緩存在本地計算機上的程序集。這允許更快的啓動和有時執行。
JIT只能按方法完成;它不會把所有東西都扔掉......只有你需要的東西。當然這在第一次進入方法(加上泛型等)時有一個小的但可衡量的打擊。 NGEN預先做了這項工作,但必須在相同的平臺/架構等上完成 - 實質上該機器。這也意味着將其添加到GAC等,這可能需要更高的訪問權限。
在很多情況下,JIT很好,特別是如果應用程序長時間打開(例如Web服務器)。
大量的在這裏留下了細節,但是:
JIT沒想象中的那麼......,JIT是剛剛在時間,這意味着它不會被編譯爲本地代碼,直到代碼,如一個方法,實際上是被調用的。在那之前只有存根。這將保持緩存,以便對該方法的後續調用不會重新生成本機代碼。
NGen一次完成整個裝配。 NGen一次完成所有工作,因此Jitting不是必需的。
尚未提及的一個非常重要的重要區別是,本機緩存的圖像具有「共享代碼頁」,這使得在終端服務或Citrix上運行的應用程序的內存佔用量發生巨大差異。
關鍵的事情,瞭解有關NGEN是,雖然它編譯你的代碼,它也標誌着代碼頁的共享,讓您的應用程序的多個實例可以共享由第一個實例所使用的存儲空間的部分。如果您在終端服務下運行,這非常有用。
這對多個用戶在單個機器上使用的應用程序具有非常重要的意義,因爲它們跨進程共享內存。如果圖像緩存不能很好地維護,這可能會導致非常奇怪,難以重現的行爲和資源管理問題。
- 1. 爲什麼JIT如果我們有NGEN
- 2. Seq.iter vs - 有什麼區別?
- 3. |有什麼區別? vs. ||
- 4. sjlj vs dwarf vs seh有什麼區別?
- 5. 有什麼區別
- 6. npm 3 vs Bower有什麼區別?
- 7. python:var vs. self.var(有什麼區別?)
- 8. javax.ws.rs.core.Cookie vs javax.ws.rs.core.NewCookie,有什麼區別?
- 9. log4j RollingFileAppender vs DailyRollingFileAppender有什麼區別
- 10. 'while(true)`vs`while(\ true)`有什麼區別?
- 11. .tar vs .tgz ...有什麼區別?
- 12. 果醬vs鮑爾,有什麼區別?
- 13. img.height vs img.style.height有什麼區別?
- 14. Application.FileDialog vs GetOpenFilename:有什麼區別?
- 15. IntegratedWindowsAuthentication vs Negotiate有什麼區別?
- 16. CreateThread vs PsCreateSystemThread - 有什麼區別?
- 17. getHeight()vs getPreferredHeight()有什麼區別
- 18. IIFE:var vs this - 有什麼區別嗎?
- 19. _.each vs _.map有什麼區別?
- 20. &vs @ and = in angularJS有什麼區別
- 21. 有什麼區別? #header.h1 Vs:#header h1
- 22. $ .children()vs $ .children('className')有什麼區別?
- 23. AddHandler vs. Handles - 有什麼區別?
- 24. NSTimer.CreateScheduledTimer vs CreateTimer - 有什麼區別?
- 25. Knockout.js observableArray vs Backbone.js Collection - 有什麼區別?
- 26. WPF Panel.Children vs Panel.InternalChildren - 有什麼區別?
- 27. Backbone.js vs Pusherapp - 有什麼區別?
- 28. webpack「--watch」vs「--hot」:有什麼區別?
- 29. android 2.3 vs android 4.0有什麼區別
- 30. DecodePixelWidth Vs.有什麼區別? ScaleTransform?
當我們有NGEN時,需要「JIT」嗎? – Imad 2017-06-01 09:20:26