可能是一个非常天真的问题,但想知道这些东西是如何工作的:让我们假设我们在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