ガベージコレクタは別のプロセスで起動しますか?
例えば:
コードの一部で実行された処理時間を測定しようとすると、この間にガベージコレクタが収集を開始すると、新しいプロセスまたは同じプロセスで開始されますか?
それは次のように働いていますか?
//Code (Process 1) --> Garbage Collector Run (Process 1) //Code (Process 1)
またはこれは好きですか?
//Code (Process 1) --> Garbage Collector Run (Process 2) //Code (Process 1)
回答:
回答№1の場合は30ガベージコレクタは、そのスレッドを実行します。まったく同じプロセスでガベージコレクションを起動します。現在のスレッドをすべて停止し、自身を実行します。それは確かに別のプロセスを開始しません、あなたはWindowsでそれを見たでしょう。
から MSDN:
ガベージコレクションが開始される前に、ガベージコレクションをトリガーしたスレッドを除いて、すべての管理対象スレッドが中断されます。
(これはワークステーションのみに適用され、 DrKoch)。サーバーには、ガベージコレクションのために実行中のバックグラウンドスレッドがあります。
参照先のドキュメントで「並行ガベージコレクション」を検索すると、これをサポートするテキスト「GCスレッド」が表示されます。
必要に応じて、ガラベージコレクションを別のスレッドで実行するよう強制することができます。これをあなたの中に入れて app.config
:
<configuration>
<runtime>
<gcServer enabled="true"/>
</runtime>
</configuration>
(から この答え)
また読む .NET Framework 4.5には、クライアントアプリケーションおよびサーバーアプリケーション用の新しいガベージコレクタ拡張機能が含まれています、 アダム・ホーズワース.NET 4.5以降のガベージコレクタの動作の変更について説明します。
回答№2については9
最初に、 プロセス そして 糸。 @CodesInChaosで指摘されているように プロセス 独自のアドレス空間を持つため、GCを別のプロセスで実行することは意味がありません。
私たちが話すなら スレッド: 「ワークステーション」と「サーバー」の間に違いがあります。ワークステーションでは、次のいずれかのユーザースレッドで実行されます。
コレクションは、ガベージコレクションをトリガしたユーザースレッドで発生します
サーバー上では、別々の専用スレッドで実行されます。
この収集は、THREAD_PRIORITY_HIGHEST優先レベルで実行されている複数の専用スレッドで行われます。
マシンが「サーバー」と見なされる場合は、構成によって異なります。
実行時設定スキーマの<gcServer>要素