13
我想知道是否有任何方法來改變.NET JIT編譯器的行爲,方法是指定一個用於更深入優化的首選項。否則,如果它可以進行某種簡檔引導的優化,如果它尚未完成,那將會很好。有什麼辦法可以改變.NET JIT編譯器的性能,而不是編譯時間?
我想知道是否有任何方法來改變.NET JIT編譯器的行爲,方法是指定一個用於更深入優化的首選項。否則,如果它可以進行某種簡檔引導的優化,如果它尚未完成,那將會很好。有什麼辦法可以改變.NET JIT編譯器的性能,而不是編譯時間?
這是在編譯程序集時設置的。有兩種類型的優化:
默認設置爲這個
/optimize- /debug-
這意味着未優化IL,和優化的本機代碼。
/optimize /debug(+/full/pdbonly)
這意味着未優化的IL和未優化的本機代碼(最佳調試設置)。
最後,爲了獲得最快的性能:
/optimize+ /debug(-/+/full/pdbonly)
這將產生優化的IL和優化的本地代碼。
當生成未優化的IL時,編譯器將在整個代碼中插入NOP指令。這使代碼更容易調試,允許在控制流程指令上設置斷點,例如for,while,else,try,catch等。
CLR在優化代碼方面做得非常好,無論如何。一旦某個方法被JIT化,一個call或callvirt指令上的指針直接指向本地代碼。
此外,CLR將利用可用的任何架構技巧來獲得您的代碼。這意味着通過JIT運行的程序集運行速度比使用Ngen預編譯的程序集運行速度快(儘管啓動時間稍微慢一點),因爲NGen將針對所有平臺進行編譯,而不會利用任何技巧。
+1不錯。您在IDE中確切地設置了這些值? – Trap 2010-02-12 16:53:15