c# - .Net 应用程序内存管理

标签 c# .net wpf visual-studio memory-management

可能是一个非常幼稚的问题,但想知道这些东西是如何工作的:假设我们在 Visual Studio 中有 10 个项目,其中 5 个使用相对路径引用外部 DLL(例如 Ext.dll) .

现在,当我的应用程序部署并在客户端计算机上运行时,Ext.dll 会在内存中加载 5 次吗?或者它只会被加载一次并被其他引用项目使用?

最佳答案

程序集只会在内存中加载一次。

CLR 首先检查程序集是否已加载到当前 AppDomain 中,如果没有,程序集将在 AppDomain 下加载,否则符号将从已加载的程序集中解析。

当然,除非您手动创建另一个具有自己的程序集集的 AppDomain。

Moreover, assembly with same version cannot be loaded in memory at same time. CLR doesn't allow that. But you can have different versions of same assembly to be loaded in memory and that too in case assemblies are strongly signed. But in your case version is same so CLR won't load same assembly twice anyhow.


如果你想在特定的时间间隔检查内存中加载了哪些程序集,你可以使用这段代码来获取所有加载的程序集:

var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();

关于c# - .Net 应用程序内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21709190/

相关文章:

c# - Unity Player 正在向自己射击

c# - 正则表达式如何提取定界符之间的字符串而不是双定界符

c# - 如何在将文件从流保存到磁盘之前计算文件的大小?

c# - 为什么此代码会抛出 ArgumentNullException?

c# - Xaml 不是破坏了我的封装吗?

c# - Costura 未加载 native Dll

c# - 为什么这种扩展方法不起作用?

.net - 在包含计数的子查询上使用左连接的 Linq

wpf - TreeViewItem 上的键绑定(bind)

c# - 在后面的代码中动态添加 IValueConverter