2

是什么导致 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 重置?

拜托,我能解释一下吗?

4

1 回答 1

6

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

CLR 关闭是进程终止。

AppDomain 卸载是每个 AppDomain 分开的。

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

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

于 2012-04-07T13:32:35.560 回答