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]程序类比:
拜托,我能解释一下吗?
AppDomain是一个比Process更细粒度的单元.进程可以有多个AppDomain实例,每个实例都可以单独卸载.
CLR关闭是流程终止.
AppDomain卸载分别是每个AppDomain.
(虽然我不会亲自保证,不检查文档,所有终结器等都在任何一种情况下执行)
例如,我在长时间运行的自更新Windows服务中使用多个AppDomain实例; 当检测到新版本时,它会下拉新的二进制文件,生成一个新的AppDomain,让它运行,将未来的操作切换到新的AppDomain,并卸载旧的AppDomain(当运行操作完成时).