次の方法で共有


発生したコレクション

ほとんどの場合、ガベージ コレクターはコレクションを実行する最適なタイミングを判断できます。個別に実行できるようにする必要があります。 強制コレクションによってアプリケーションのパフォーマンスが向上する場合はまれです。 このような場合は、 GC.Collect メソッドを使用してガベージ コレクションを強制することで、ガベージ コレクションを誘発できます。

GC.Collect メソッドは、アプリケーションのコード内の特定の時点で使用されるメモリ量が大幅に減少する場合に使用します。 たとえば、アプリケーションで複数のコントロールを含む複雑なダイアログ ボックスを使用している場合、ダイアログ ボックスが閉じられたときに Collect を呼び出すと、ダイアログ ボックスで使用されるメモリをすぐに再利用することでパフォーマンスが向上する可能性があります。 ガベージ コレクターが最適でない時間にオブジェクトを再利用しようとするとパフォーマンスが低下する可能性があるため、アプリケーションでガベージ コレクションが頻繁に発生しないようにしてください。 次のセクションで説明するように、GCCollectionMode.Optimized メソッドにCollect列挙値を指定して収集できるのは、コレクションの生産性が高い場合のみです。

GC コレクション モード

GC.Collect値を含むGCCollectionMode メソッド オーバーロードのいずれかを使用して、強制コレクションの動作を次のように指定できます。

GCCollectionMode 説明
Default 実行中のバージョンの .NET に既定のガベージ コレクション設定を使用します。
Forced 直ちにガベージ コレクションを強制的に実行します。 これは、 GC.Collect() オーバーロードを呼び出すことと同じです。 その結果、すべての世代の完全なブロック コレクションが生成されます。

また、直ちにフル ブロッキング ガベージ コレクションを強制的に実行する前に、GCSettings.LargeObjectHeapCompactionMode プロパティを GCLargeObjectHeapCompactionMode.CompactOnce に設定して、大きなオブジェクト ヒープを圧縮することもできます。
Optimized ガベージ コレクターが、現在の時刻がオブジェクトの再利用に最適かどうかを判断できるようにします。

ガベージコレクターは、ガベージコレクションが十分に生産的でないと判断した場合、オブジェクトの回収を行わずに処理を終了します。

バックグラウンドまたはブロッキング コレクション

GC.Collect(Int32, GCCollectionMode, Boolean) メソッドオーバーロードを呼び出して、誘発されたコレクションがブロックされているかどうかを指定できます。 実行されるコレクションの種類は、メソッドの mode パラメーターと blocking パラメーターの組み合わせによって異なります。 modeGCCollectionMode 列挙体のメンバーであり、 blockingBoolean 値です。 次の表は、 mode 引数と blocking 引数の相互作用をまとめたものです。

mode blocking = true blocking = false
Forced または Default ブロッキング コレクションはできるだけ早く実行されます。 バックグラウンド コレクションが進行中で、生成が 0 または 1 の場合、 Collect(Int32, GCCollectionMode, Boolean) メソッドはすぐにブロッキング コレクションをトリガーし、コレクションの終了時に戻ります。 バックグラウンド コレクションが進行中で、 generation パラメーターが 2 の場合、メソッドはバックグラウンド コレクションが完了するまで待機し、ブロックジェネレーション 2 のコレクションをトリガーしてから、戻ります。 収集はできるだけ早く行われます。 Collect(Int32, GCCollectionMode, Boolean) メソッドはバックグラウンド コレクションを要求しますが、これは保証されません。状況によっては、ブロック コレクションが引き続き実行される可能性があります。 バックグラウンド コレクションが既に進行中の場合、メソッドはすぐに返されます。
Optimized ガベージ コレクターと generation パラメーターの状態によっては、ブロッキング コレクションを実行できます。 ガベージ コレクターは、最適なパフォーマンスを提供しようとします。 ガベージ コレクターの状態によっては、コレクションが実行される場合があります。 Collect(Int32, GCCollectionMode, Boolean) メソッドはバックグラウンド コレクションを要求しますが、これは保証されません。状況によっては、ブロック コレクションが引き続き実行される可能性があります。 ガベージ コレクターは、最適なパフォーマンスを提供しようとします。 バックグラウンド コレクションが既に進行中の場合、メソッドはすぐに返されます。

こちらも参照ください