2012-04-07 71 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