発生したコレクションInduced Collections

ほとんどの場合、コレクションの実行に最適なタイミングはガベージ コレクターが判断できるので、ガベージ コレクターに任せるのが良い方法です。In most cases, the garbage collector can determine the best time to perform a collection, and you should let it run independently. ただし、ごくまれに、強制的にコレクションを実行するとアプリケーションのパフォーマンスが向上する場合があります。There are rare situations when a forced collection might improve your application's performance. このような場合は、GC.Collect メソッドを使用してガベージ コレクションを強制的に実行できます。In these cases, you can induce garbage collection by using the GC.Collect method to force a garbage collection.

アプリケーションのコードの特定の位置で、使用しているメモリ量が大きく減少する場合は、GC.Collect メソッドを使用します。Use the GC.Collect method when there is a significant reduction in the amount of memory being used at a specific point in your application's code. たとえば、複数のコントロールのある複雑なダイアログ ボックスを使用するアプリケーションでは、ダイアログ ボックスを閉じるときに Collect を呼び出すと、ダイアログ ボックスの使用メモリが直ちに再利用されてパフォーマンスが向上する可能性があります。For example, if your application uses a complex dialog box that has several controls, calling Collect when the dialog box is closed could improve performance by immediately reclaiming the memory used by the dialog box. 適切でない回数でガベージ コレクターがオブジェクトの再利用を試みるとパフォーマンスが低下する場合があるので、アプリケーションではあまり頻繁にガベージ コレクションを強制しないでください。Be sure that your application is not inducing garbage collection too frequently, because that can decrease performance if the garbage collector is trying to reclaim objects at non-optimal times. 次のセクションで説明するように、コレクションの効果がある場合にのみ、GCCollectionMode.Optimized のメソッドに対して収集する Collect の列挙値を指定できます。You can supply a GCCollectionMode.Optimized enumeration value to the Collect method to collect only when collection would be productive, as discussed in the next section.

GC コレクション モードGC collection mode

GC.Collect 値を含む GCCollectionMode メソッド オーバーロードの 1 つを使用して、強制的コレクションの動作を次のように指定できます。You can use one of the GC.Collect method overloads that includes a GCCollectionMode value to specify the behavior for a forced collection as follows.

GCCollectionMode の値GCCollectionMode value 説明Description
Default 実行中のバージョンの .NET の既定のガベージ コレクション設定を使用します。Uses the default garbage collection setting for the running version of .NET.
Forced 直ちにガベージ コレクションを強制的に実行します。Forces garbage collection to occur immediately. これは、GC.Collect() オーバーロードを呼び出すのと同じです。This is equivalent to calling the GC.Collect() overload. 結果として、すべてのジェネレーションのフル ブロッキング コレクションになります。It results in a full blocking collection of all generations.

また、直ちにフル ブロッキング ガベージ コレクションを強制的に実行する前に、GCSettings.LargeObjectHeapCompactionMode プロパティを GCLargeObjectHeapCompactionMode.CompactOnce に設定して、大きなオブジェクト ヒープを圧縮することもできます。You can also compact the large object heap by setting the GCSettings.LargeObjectHeapCompactionMode property to GCLargeObjectHeapCompactionMode.CompactOnce before forcing an immediate full blocking garbage collection.
Optimized オブジェクトを再利用するのに現在が最適なときかどうかをガベージ コレクターが判断できるようにします。Enables the garbage collector to determine whether the current time is optimal to reclaim objects.

ガベージ コレクターは、コレクションの実行を正当化できるほど効果がないと判断して、オブジェクトを再利用せずに戻る場合があります。The garbage collector could determine that a collection would not be productive enough to be justified, in which case it will return without reclaiming objects.

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

GC.Collect(Int32, GCCollectionMode, Boolean) メソッド オーバーロードを呼び出して、発生するコレクションがブロッキング コレクションであるかどうかを指定できます。You can call the GC.Collect(Int32, GCCollectionMode, Boolean) method overload to specify whether an induced collection is blocking or not. 実行されるコレクションの型は、メソッドの modeblocking のパラメーターの組み合わせによって異なります。The type of collection performed depends on a combination of the method's mode and blocking parameters. modeGCCollectionMode 列挙体のメンバーです。blockingBoolean 値です。mode is a member of the GCCollectionMode enumeration, and blocking is a Boolean value. modeblocking 引数の相互作用を次の表にまとめます。The following table summarizes the interaction of the mode and blocking arguments.

mode blocking = true blocking = false
Forced または DefaultForced or Default ブロッキング コレクションはできるだけ早く実行されます。A blocking collection is performed as soon as possible. バックグラウンド コレクションが実行中でジェネレーションが 0 または 1 の場合、Collect(Int32, GCCollectionMode, Boolean) メソッドは直ちにブロッキング コレクションをトリガーし、コレクションが終了すると制御を戻します。If a background collection is in progress and generation is 0 or 1, the Collect(Int32, GCCollectionMode, Boolean) method immediately triggers a blocking collection and returns when the collection is finished. バックグラウンド コレクションが実行中で generation パラメーターが 2 の場合、メソッドはバックグラウンド コレクションの終了を待機し、ジェネレーション 2 のブロッキング コレクションをトリガーして、制御を戻します。If a background collection is in progress and the generation parameter is 2, the method waits until the background collection is finished, triggers a blocking generation 2 collection, and then returns. コレクションはできるだけ早く実行されます。A collection is performed as soon as possible. Collect(Int32, GCCollectionMode, Boolean) メソッドはバックグラウンド コレクションを要求しますが、それは保証されず、状況によってはブロッキング コレクションが実行される場合もあります。The Collect(Int32, GCCollectionMode, Boolean) method requests a background collection, but this is not guaranteed; depending on the circumstances, a blocking collection may still be performed. バックグラウンド コレクションが既に実行中の場合、メソッドはすぐに制御を返します。If a background collection is already in progress, the method returns immediately.
Optimized ガベージ コレクターおよび generation パラメーターの状態によっては、ブロッキング コレクションが実行される場合があります。A blocking collection may be performed, depending on the state of the garbage collector and the generation parameter. ガベージ コレクターは最適なパフォーマンスを提供しようとします。The garbage collector tries to provide optimal performance. ガベージ コレクターの状態によっては、コレクションが実行される場合があります。A collection may be performed, depending on the state of the garbage collector. Collect(Int32, GCCollectionMode, Boolean) メソッドはバックグラウンド コレクションを要求しますが、それは保証されず、状況によってはブロッキング コレクションが実行される場合もあります。The Collect(Int32, GCCollectionMode, Boolean) method requests a background collection, but this is not guaranteed; depending on the circumstances, a blocking collection may still be performed. ガベージ コレクターは最適なパフォーマンスを提供しようとします。The garbage collector tries to provide optimal performance. バックグラウンド コレクションが既に実行中の場合、メソッドはすぐに制御を返します。If a background collection is already in progress, the method returns immediately.

関連項目See also