【问题标题】:.Net Application Memory Management.Net 应用程序内存管理
【发布时间】:2014-02-11 17:45:11
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    此外,相同版本的程序集无法加载到内存中 同时。 CLR 不允许这样做。但是你可以有不同的版本 相同的程序集要加载到内存中,以防万一 程序集是强签名的。但是在您的情况下,版本是相同的,因此 CLR 无论如何都不会加载相同的程序集两次。


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

    var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();
    

    【讨论】:

    • 感谢 Rohit,但我们如何检查/确认情况是否如此?
    【解决方案2】:

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

    注意:对于应用程序Clr 的每个实例再次加载程序集。

    您可以阅读Clr via c#。在第一章中您可以了解许多这些概念。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 2012-12-18
      • 2011-11-11
      • 1970-01-01
      相关资源
      最近更新 更多