2010-05-06 48 views

回答

7

C#語言不會內聯,但.NET CLR JIT編譯器可以。

虛擬化可能在密封類中是內聯的,但我不確定非密封類。我會假設沒有。

JIT在執行代碼之前進行優化,當函數被首次調用時。因爲在JIT開始工作之前,您沒有任何代碼可以執行。 :P JIT只在第一次調用函數時發生,而不是在每次調用函數時發生。

還要注意內聯只能在程序集(DLL)中完成。 JIT編譯器不會複製另一個程序集中的代碼以將其內聯到此程序集的代碼中。

7

C#不支持明確的內聯。 JIT編譯器可以在優化的同時在舞臺後面進行一些內聯​​。

4

C#編譯器本身不會執行內聯(您可以通過在Reflector中打開程序集來進行驗證)。 CLR的JIT編譯器確實內聯了,關於這個主題,這裏是one blog post(還有更多)。

請注意,一般而言,.NET編譯器無法跨越DLL邊界進行內聯,因爲在編譯依賴於DLL的代碼後,DLL可能會更改。因此在運行時進行內聯是有意義的。