2014-02-11 154 views
4

可能是一個非常天真的問題,但想知道這些東西是如何工作的:讓我們假設我們在Visual Studio中有10個項目,並且其中5個引用了外部DLL(比如Ext.dll) ,使用相對路徑。.Net應用程序內存管理

現在當我的應用程序部署在客戶機上運行時,Ext.dll會在內存中加載5次嗎?或者它會被加載一次並被其他參考項目使用?

回答

5

程序集只會在內存中加載一次。

CLR首先檢查是否已加載當前AppDomain,如果不是被組裝之下的AppDomain否則符號加載的程序集是從已加載的程序集解決。

Ofcourse除非您手動創建另一個擁有自己的程序集的AppDomain。

此外,同一版本的程序集不能同時加載到內存中的 。 CLR不允許這樣做。但是您可以將不同版本的相同程序集版本 加載到內存中,並且 程序集也被強烈簽名。但在你的情況下,版本是相同的,所以CLR不會加載相同的程序集兩次。


如果您要檢查在一定的間隔時間,什麼組件在內存中加載,你可以使用這段代碼來獲取所有加載的程序集:

var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); 
+0

謝謝Rohit,但我們如何檢查/確認是這種情況? – Shankar

+0

我已經更新了答案。請檢查。 –

+0

太好了,謝謝! – Shankar

3

Clr加載組件在記憶中只有一次。

注意:對於應用程序的每個實例Clr再次加載程序集。

您可以閱讀Clr via c#。在第一章中,您可以瞭解許多這些概念。

相關問題