.Net CLR 卸载与关闭?

Posted

技术标签:

【中文标题】.Net CLR 卸载与关闭?【英文标题】:.Net CLR Unloading vs shutdown? 【发布时间】:2012-04-07 13:22:38 【问题描述】:

什么导致 Finalize 方法被调用?

此问题的 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 重置?

请问,我可以稍微解释一下吗?

【问题讨论】:

不要认为CLR 有任何类型的关闭,很可能这只是一种说/考虑卸载的方式...... 【参考方案1】:

AppDomain 是比 Process 更细化的单元。一个 Process 可以有多个 AppDomain 实例,每个实例都可以单独卸载。

CLR 关闭是进程终止。

AppDomain卸载是每个AppDomain分开的。

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

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

【讨论】:

+1 我实际上在想什么,但不确定要发帖:) 我在运行简单的控制台应用程序....它有 1 个 AppDomain 和 1 个进程....不是吗? @Royi 是的,一个简单的控制台 exe 有一个进程和一个 AppDomain 不过,没有什么能阻止您在控制台应用程序中生成另一个 AppDomain。 @Tigran 这是一个关于 XP 和 Vista 的 CAD 示例,看起来也是桌面:dwf.blogs.com/beyond_the_paper/2009/04/…

以上是关于.Net CLR 卸载与关闭?的主要内容,如果未能解决你的问题,请参考以下文章

C#.NET中的PLC编程[关闭]

flashdevelop 构建错误:无法初始化 jni4net。 (32 位与 64 位 JVM 与 CLR ?)

卸载与 MySql 相关的所有内容是不是安全? [关闭]

电脑出现CLR错误怎么办?

Java面试题和解答

azure怎么卸载?或者退出,关闭??急