2012-04-07 53 views
2

什么原因导致Finalize方法被调用?.Net CLR卸载vs关机?

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]程序比喻:

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

请问,我可以有小解释吗?

+0

不认为有任何一种* CLR关闭*,最可能的是它只是一种说/卸载的想法...... – Tigran 2012-04-07 13:31:49

回答

6

AppDomain比Process更精细。一个进程可以有多个AppDomain实例,每个实例可以分别卸载。

CLR关闭是进程终止。

AppDomain卸载分别是每个AppDomain。

(虽然我没有亲自保证会,没有检查的文件,所有的终结等,在这两种情况下执行)

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

+0

+1实际上我在想什么,但没有'一定要做一个帖子:) – Tigran 2012-04-07 13:33:21

+0

whan我正在运行简单的控制台应用程序....它有1 AppDomain和1进程....不是吗? – 2012-04-07 13:34:21

+0

@罗伊是一个简单的控制台EXE有一个进程和一个AppDomain – 2012-04-07 13:35:11