2011-02-28 28 views

回答

6

是的,這是可能的,在JITting時間。

不在編譯時。

這意味着您的程序集將只包含您編寫它的代碼,但是當它在運行時被打入本機機器代碼時,JIT編譯器可能會將來自其他程序集的小方法內聯到您自己的代碼中。

+0

所以我編譯的dll不會包含內聯代碼? – 2011-02-28 19:38:55

+1

這是正確的,因爲在編譯期間從不會發生內聯,只有jitting。 – 2011-02-28 19:42:20

+0

在Jonathan Allen的回答中談到ngen.exe編譯的情況? – 2011-02-28 19:46:52

3

是的。如果您不使用ngen.exe預編譯程序集,則JIT編譯器可以自動內聯在程序集之間。

+0

你能否解釋一下呢?我不熟悉ngen.exe。 – 2011-02-28 19:39:23

+1

C#編譯爲IL代碼。當它在用戶的計算機上運行時,JIT或即時編譯器將其轉換爲機器代碼。有時候你想把它變成機器碼。爲此,您可以使用程序調用ngen或「本機圖像生成器」。 – 2011-03-01 02:34:11

+0

http://msdn.microsoft.com/en-us/library/6t9t5wcf(VS.80).aspx – 2011-03-01 02:34:33

0

準確地說,第

但是,如果DLL的庫可用(DLL代表動態鏈接庫,這是我們不能靜態鏈接),它可能會發生。

自動內嵌作爲優化的一個步驟,僅在很少使用的小函數或函數上執行,但總是在庫上執行。最後,靜態鏈接庫(Windows中的* .lib或Unix中的。a)可以複製到您的程序中,但動態鏈接庫(Windows中爲.dll或UNIX中爲* .so)噸。

在.NET或類似框架的情況下,故事有點不同。

+1

這個問題被標記爲「c#」和「.net」,所以我認爲可以安全地假設Kees * *詢問.NET。 – Aaron 2011-02-28 19:41:26

+0

是的......這是關於.Net dll的。儘管如此,這個觀察雖然不是主題,但卻是一個很好的觀察。 – 2011-02-28 19:43:45

相關問題