可能是一個非常天真的問題,但想知道這些東西是如何工作的:讓我們假設我們在Visual Studio中有10個項目,並且其中5個引用了外部DLL(比如Ext.dll) ,使用相對路徑。.Net應用程序內存管理
現在當我的應用程序部署在客戶機上運行時,Ext.dll會在內存中加載5次嗎?或者它會被加載一次並被其他參考項目使用?
可能是一個非常天真的問題,但想知道這些東西是如何工作的:讓我們假設我們在Visual Studio中有10個項目,並且其中5個引用了外部DLL(比如Ext.dll) ,使用相對路徑。.Net應用程序內存管理
現在當我的應用程序部署在客戶機上運行時,Ext.dll會在內存中加載5次嗎?或者它會被加載一次並被其他參考項目使用?
程序集只會在內存中加載一次。
CLR首先檢查是否已加載當前AppDomain
,如果不是被組裝之下的AppDomain否則符號加載的程序集是從已加載的程序集解決。
Ofcourse除非您手動創建另一個擁有自己的程序集的AppDomain。
此外,同一版本的程序集不能同時加載到內存中的 。 CLR不允許這樣做。但是您可以將不同版本的相同程序集版本 加載到內存中,並且 程序集也被強烈簽名。但在你的情況下,版本是相同的,所以CLR不會加載相同的程序集兩次。
如果您要檢查在一定的間隔時間,什麼組件在內存中加載,你可以使用這段代碼來獲取所有加載的程序集:
var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();
謝謝Rohit,但我們如何檢查/確認是這種情況? – Shankar
我已經更新了答案。請檢查。 –
太好了,謝謝! – Shankar