.NET进程中的CLR何时加载程序集?

4
  1. 当引用程序集中的类时,CLR是否会加载.NET程序集?

或者

  1. 当使用声明了程序集命名空间的类时,是否会加载该程序集?

另外,如果长时间未使用程序集,它是否会卸载该程序集?


你能否澄清一下为什么你需要这个知识?你的代码是否依赖于在特定时间加载程序集,或者其他原因? - Michael Sondergaard
我正在维护一个旧应用程序,其中一个类包含许多未使用的'namespace'。我在想是否值得将其删除。 - Amitabh
1
请看这篇关于未使用的 usings 的文章:http://blogs.msdn.com/csharpfaq/archive/2004/10/20/245411.aspx - Darin Dimitrov
3个回答

5

就是JIT编译器会指示CLR在需要时将程序集翻译为机器码并加载,具体时间是不确定的。至于第二个问题,一旦程序集被加载到AppDomain中,唯一卸载它的方法就是销毁该AppDomain,没有其他方法可以卸载程序集。


1
+1,准确无误,除了“一旦翻译完成”。翻译鸡在装载蛋之后。 - Hans Passant

1

当您尝试使用程序集中的类型时,它会被加载。当程序执行一个未知的类型时,运行时会解析该类型,然后加载包含该类型的程序集。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接