2

Finalize メソッドが呼び出される原因は何ですか?

この質問に対する 2 つの回答 (4 つのうち) は次のとおりです。

  • The CLR is unloading an AppDomainAppDomain がアンロードされると、CLR は AppDomain 内の何もルートと見なさず、すべての世代で構成されるガベージ コレクションが実行されます。

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

The CLR is unloading an AppDomainプログラム(コンソール[exe]など)が閉じられているときだと思います(閉じる/プログラムの通常の終了を押すことにより)

どうThe CLR is shutting downですか?上記の [Exe] プログラムのアナロジーを続けます。

  • どういう意味ですか ?CLRをシャットダウンするにはどうすればよい ですか...?
  • [IIS の世界では] IIS のリセットという意味ですか?

ちょっとした説明をお願いできますか?

4

1 に答える 1

6

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

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

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

(ただし、ドキュメントを確認せずに、すべてのファイナライザーなどがいずれの場合でも実行されることを個人的に保証することはしません)

例として、長時間実行される自己更新 Windows サービスで複数の AppDomain インスタンスを使用します。新しいバージョンが検出されると、新しいバイナリをプルダウンし、新しい AppDomain を生成して実行し、将来の操作を新しい AppDomain に切り替え、古い AppDomain をアンロードします (実行中の操作が完了したとき)。

于 2012-04-07T13:32:35.560 に答える