C# .Net CLR卸载与关闭?

C# .Net CLR卸载与关闭?,c#,.net,garbage-collection,clr,appdomain,C#,.net,Garbage Collection,Clr,Appdomain,什么导致调用Finalize方法 本问题的2个(共4个)答案为: CLR正在卸载AppDomain当AppDomain卸载时,CLR会考虑 AppDomain中没有任何内容是根,垃圾收集由 代代相传 CLR正在关闭当进程正常终止时,CLR将关闭 (例如,与通过任务管理器进行外部关闭相反) 我假设CLR正在卸载AppDomain时程序(例如控制台[exe])正在关闭(通过按程序的关闭/正常结束) CLR正在关闭,怎么样?继续上面的[Exe]程序类比: 这是什么意思?如何关闭CLR [在IIS

什么导致调用Finalize方法

本问题的2个(共4个)答案为:

  • CLR正在卸载AppDomain
    当AppDomain卸载时,CLR会考虑 AppDomain中没有任何内容是根,垃圾收集由 代代相传

  • CLR正在关闭
    当进程正常终止时,CLR将关闭 (例如,与通过任务管理器进行外部关闭相反)

我假设CLR正在卸载AppDomain时程序(例如控制台[exe])正在关闭(通过按程序的关闭/正常结束)

CLR正在关闭,
怎么样?继续上面的[Exe]程序类比:

  • 这是什么意思?如何关闭CLR
  • [在IIS世界中]这是否意味着IIS重置

请给我一个小的解释好吗?

AppDomain是一个比流程更精细的单元。一个进程可以有多个AppDomain实例,每个实例都可以单独卸载

CLR关闭是指进程终止

AppDomain卸载是分别为每个AppDomain卸载的

(尽管在未检查文件的情况下,我个人不会保证在任何情况下都会执行所有定稿人等)


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

不要认为有任何类型的CLR关闭,最有可能的是,这只是一种表达/思考卸载的方式…+1实际上我在想什么,但我不确定发帖子:)我在运行简单的控制台应用程序…它有一个AppDomain和一个进程…不是吗?@Royi是的,一个简单的控制台exe有一个进程和一个AppDomain没有什么能阻止你在控制台应用程序中生成另一个AppDomain。@Tigran这里有一个CAD示例,讲的是XP和Vista,桌面也是如此: