2014-02-11 98 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#。在第一章中,您可以了解许多这些概念。

相关问题