【发布时间】:2014-02-11 17:45:11
【问题描述】:
这可能是一个非常幼稚的问题,但想知道这些东西是如何工作的:假设我们在 Visual Studio 中有 10 个项目,其中 5 个使用相对路径引用外部 DLL(比如 Ext.dll) .
现在,当我的应用程序部署在客户端计算机上运行时,Ext.dll 会在内存中加载 5 次吗?还是只加载一次并被其他引用项目使用?
【问题讨论】:
标签: c# .net wpf visual-studio memory-management
这可能是一个非常幼稚的问题,但想知道这些东西是如何工作的:假设我们在 Visual Studio 中有 10 个项目,其中 5 个使用相对路径引用外部 DLL(比如 Ext.dll) .
现在,当我的应用程序部署在客户端计算机上运行时,Ext.dll 会在内存中加载 5 次吗?还是只加载一次并被其他引用项目使用?
【问题讨论】:
标签: c# .net wpf visual-studio memory-management
程序集只会在内存中加载一次。
CLR 首先检查当前AppDomain 中是否已加载程序集,如果未在 AppDomain 下加载程序集,则从已加载的程序集中解析符号。
当然,除非您手动创建另一个拥有自己的程序集的 AppDomain。
此外,相同版本的程序集无法加载到内存中 同时。 CLR 不允许这样做。但是你可以有不同的版本 相同的程序集要加载到内存中,以防万一 程序集是强签名的。但是在您的情况下,版本是相同的,因此 CLR 无论如何都不会加载相同的程序集两次。
如果您想在某个时间间隔检查内存中加载了哪些程序集,您可以使用这段代码获取所有加载的程序集:
var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();
【讨论】:
【讨论】: