2016-04-21 44 views
0

當asp.net編譯時,代碼在IL程序集中轉換,然後在本機代碼中轉換。 爲什麼我們需要IL組裝狀態? 爲什麼我們無法將高級語言代碼轉換爲機器代碼?我認爲這會提高時間和速度?需要ASP.NET編譯結構中的中間程序集

+0

IL彙編指令位於字節碼中。它沒有任何目標平臺或CPU。您可以在任何支持的平臺上運行它(例如Microsoft .Net運行時,Mono平臺)。在運行時,Bytecode將被轉換爲與taget CPU兼容的Native代碼。如果直接將它轉換爲本地代碼,則必須爲不同的平臺創建不同的可執行文件(例如:一個用於Mono,另一個用於Microsoft .Net) –

+0

@chathuranga謝謝,您解釋得非常好。 –

回答

1

確實有可能直接編譯爲機器代碼,但由於.Net注重於portability,因此編譯爲IL而不是機器代碼是一個很好的權衡。每個平臺(Win7,Win 2008 Server,Win 10等)都有特定的JIT-compilers,它們可以在運行時將平臺上的編譯處理爲平臺特定的代碼。否則,你必須編譯你的.Net代碼,用於你應該託管你的應用程序的特定平臺。 (例如,在您的開發機器上,另一個在您的服務器上。)

另外,由於JIT編譯在runtime完成,因此可以根據預編譯版本無法進行的數據進行優化。這使得JIT編譯的代碼有時更快。

默認情況下JIT編譯的代碼被緩存在內存中並被重用,所以它只需要編譯一次代碼。

Here是一篇很好的文章,通過JIT與Native的優缺點。