2012-04-07 3 views
2

ファイナライズメソッドを呼び出す原因は何ですか?アプリケーションドメインがアンロードすると、CLRはrootになるのAppDomain内 何も考えてない.Net CLRアンロード対シャットダウン?

  • The CLR is unloading an AppDomain、およびガベージコレクションが から成る:この質問への(4)

2の答えがありますすべての世代が実行されます。

  • The CLR is shutting downプロセスが正常に終了すると、(たとえば、タスクマネージャによる外部シャットダウンとは対照的に)が終了すると、CLRがシャットダウンします。

  • Iは、プログラム(例えば、コンソール[EXE])は、(プログラムのクローズ/正常終了を押すことによって)閉鎖されているときThe CLR is unloading an AppDomainであると仮定

    どうThe CLR is shutting down約?それはどういう意味

    • は、上記の[エグゼ]プログラムのアナロジーを続けますか?どうすればいいですか?シャットダウンCLR ...?
    • [IISの世界で] IISのリセットを意味しますか?

    お願いします。

    +0

    はほとんどprobabblyそれは言う/アンロードを考えるだけの方法です、* CLR' '*のシャットダウンのいずれかの種類があるとは思わない.... – Tigran

    答えて

    6

    AppDomainは、プロセスよりも細かい単位です。プロセスは複数のAppDomainインスタンスを持つことができ、それぞれは個別にアンロードできます。

    CLRシャットダウンは終了プロセスです。

    AppDomainのアンロードは、AppDomainごとに個別に行われます。

    例として

    (私は個人的に、すべてのファイナライザなどがいずれかの場合に実行されていることを、ドキュメントをチェックせず、保証しませんが)、私は長時間実行自己更新Windowsサービスで複数のAppDomainのインスタンスを使用;新しいバージョンが検出されたときには、新しいバイナリを引き下げ、新しいアプリケーションドメインを生成します、実行していることを取得し、新しいAppDomainのに将来の操作を切り替え、(実行中の操作が完了したとき)古いアプリケーションドメインをアンロードします。

    +0

    +1私は「について考えたが、wasnた実際にどのような投稿を作成してください:) – Tigran

    +0

    私は簡単なコンソールアプリケーションを実行しています....それは1つのAppDomainと1つのプロセス....それはありません? –

    +0

    @Royiはい簡単なコンソールexeには1つのプロセスと1つのAppDomainがあります –

    関連する問題