.Net CLR卸载与关机?

Roy*_*mir 2 .net c# clr garbage-collection appdomain

什么导致最终方法被调用?

这个问题的2个回答(共4个)是:

  • The CLR is unloading an AppDomain 当AppDomain卸载时,CLR认为AppDomain中没有任何内容是根,并且执行由所有代组成的垃圾收集.

  • The CLR is shutting down 当进程正常终止时,CLR会关闭(例如,通过任务管理器进行外部关闭).

我假设The CLR is unloading an AppDomain是关闭程序(例如控制台[exe])(按程序的关闭/正常结束)

怎么样The CLR is shutting down继续上面的[Exe]程序类比:

  • 这是什么意思 ?我怎么能关闭CLR ......?
  • [在IIS世界]是否意味着IIS重置?

拜托,我能解释一下吗?

Mar*_*ell 6

AppDomain是一个比Process更细粒度的单元.进程可以有多个AppDomain实例,每个实例都可以单独卸载.

CLR关闭是流程终止.

AppDomain卸载分别是每个AppDomain.

(虽然我不会亲自保证,不检查文档,所有终结器等都在任何一种情况下执行)

例如,我在长时间运行的自更新Windows服务中使用多个AppDomain实例; 当检测到新版本时,它会下拉新的二进制文件,生成一个新的AppDomain,让它运行,将未来的操作切换到新的AppDomain,并卸载旧的AppDomain(当运行操作完成时).