【问题标题】:When does the CLR load an assembly in a .NET process?CLR 何时在 .NET 进程中加载​​程序集?
【发布时间】:2011-02-07 13:10:47
【问题描述】:
  1. 当引用程序集中的类时,CLR 是否加载了 .NET 程序集?

或者

  1. 何时加载从程序集中声明 using 命名空间的类?

同样加载了一个程序集,如果长时间不使用它会卸载程序集吗?

【问题讨论】:

  • 您能否也说明一下为什么您需要这些知识?您的代码是否依赖于在特定时间加载的程序集,还是什么?
  • 我正在维护一个遗留应用程序,其中一个类包含大量未使用的“命名空间”。我只是想知道是否值得删除它。
  • 看看这篇关于未使用的usings:blogs.msdn.com/csharpfaq/archive/2004/10/20/245411.aspx

标签: .net assemblies clr


【解决方案1】:

程序集以各种方式加载(项目引用、直接引用——这两种方式都在编译时(好吧,显然不是)),但不是通过 Using 语句。据我所知,它们再也不会被卸载了。

【讨论】:

    【解决方案2】:

    JIT 编译器指示 CLR 在将程序集转换为按需完成的机器代码后加载程序集,并且确切时间不确定。至于第二个问题,一旦一个程序集被加载到AppDomain中,唯一的卸载方法就是销毁这个AppDomain,没有其他方法可以卸载程序集。

    【讨论】:

    • +1,除“翻译后”外准确。翻译鸡是在加载鸡蛋之后。
    【解决方案3】:

    当您尝试使用程序集中的类型时会加载它。当程序开始执行它不知道的类型时,运行时会继续解析该类型,然后加载包含该类型的程序集。

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 2010-12-29
      • 2023-03-02
      • 2020-11-14
      • 2012-10-15
      • 2015-09-24
      • 1970-01-01
      • 2014-07-08
      相关资源
      最近更新 更多