待機モードLatency Modes

オブジェクトを再利用するには、ガベージ コレクターはアプリケーションで実行中のすべてのスレッドを停止する必要があります。To reclaim objects, the garbage collector must stop all the executing threads in an application. 状況によっては、アプリケーションがデータの取得やコンテンツの表示を行うときなど、重要なときにフル ガベージ コレクションが発生し、パフォーマンスが低下することがあります。In some situations, such as when an application retrieves data or displays content, a full garbage collection can occur at a critical time and impede performance. ガベージ コレクターが作業に悪影響を与える度合いを調整するには、GCSettings.LatencyMode プロパティを System.Runtime.GCLatencyMode 値のいずれかに設定することができます。You can adjust the intrusiveness of the garbage collector by setting the GCSettings.LatencyMode property to one of the System.Runtime.GCLatencyMode values.

Latency (待機時間) は、ガベージ コレクターが実行中のアプリケーションに割って入る時間を指します。Latency refers to the time that the garbage collector intrudes in your application. 待機時間が短い場合、ガベージ コレクターがオブジェクトを再利用する処理は控えめになり、アプリケーションに悪影響を与える度合いが下がります。During low latency periods, the garbage collector is more conservative and less intrusive in reclaiming objects. System.Runtime.GCLatencyMode 列挙体には、待機時間の短い設定として次の 2 つがあります。The System.Runtime.GCLatencyMode enumeration provides two low latency settings:

  • LowLatency では、ジェネレーション 2 のガベージ コレクションが停止し、ジェネレーション 0 および 1 のみガベージ コレクションが実行されます。LowLatency suppresses generation 2 collections and performs only generation 0 and 1 collections. これは、短時間の場合にのみ使用できます。It can be used only for short periods of time. この設定を長時間にわたって使用すると、システムのメモリが不足してガベージ コレクターがガベージ コレクションをトリガーした場合に、アプリケーションが少しの間停止したり、高速性を必要とする操作が中断されたりすることがあります。Over longer periods, if the system is under memory pressure, the garbage collector will trigger a collection, which can briefly pause the application and disrupt a time-critical operation. この設定は、ワークステーションのガベージ コレクションでのみ使用できます。This setting is available only for workstation garbage collection.

  • SustainedLowLatency では、フォアグラウンドのジェネレーション 2 のガベージ コレクションが停止し、ジェネレーション 0 および 1 とバックグラウンドのジェネレーション 2 のガベージ コレクションのみが実行されます。SustainedLowLatency suppresses foreground generation 2 collections and performs only generation 0, 1, and background generation 2 collections. これは長時間にわたって使用でき、ワークステーションとサーバーの両方のガベージ コレクションで使用できます。It can be used for longer periods of time, and is available for both workstation and server garbage collection. この設定は、同時実行ガベージ コレクションが無効の場合には使用できません。This setting cannot be used if concurrent garbage collection is disabled.

待機時間の短い設定になっている場合でも、次の状況ではジェネレーション 2 のガベージ コレクションの停止が解除されます。During low latency periods, generation 2 collections are suppressed unless the following occurs:

  • システムがオペレーティング システムからメモリ不足の通知を受け取った場合。The system receives a low memory notification from the operating system.

  • アプリケーション コードから GC.Collect メソッドを呼び出し、generation パラメーターに 2 を指定してガベージ コレクションを実行した場合。Your application code induces a collection by calling the GC.Collect method and specifying 2 for the generation parameter.

次の表に、GCLatencyMode の各値を使用するアプリケーション シナリオを示します。The following table lists the application scenarios for using the GCLatencyMode values.

待機時間モードLatency mode アプリケーション シナリオApplication scenarios
Batch UI 操作のないアプリケーションの場合、またはサーバー側の操作の場合に使用します。For applications that have no UI or server-side operations.

これは、同時実行ガベージ コレクションが無効の場合の既定モードです。This is the default mode when concurrent garbage collection is disabled.
Interactive UI を持つほとんどのアプリケーションの場合に使用します。For most applications that have a UI.

これは、同時実行ガベージ コレクションが有効の場合の既定モードです。This is the default mode when concurrent garbage collection is enabled.
LowLatency ガベージ コレクターからの割り込みにより重大な影響を受け、高速性を必要とする、短期間の操作を実行するアプリケーションの場合に使用します。For applications that have short-term, time-sensitive operations during which interruptions from the garbage collector could be disruptive. たとえば、アニメーションのレンダリングやデータの取得機能を実行するアプリケーションなどがあります。For example, applications that do animation rendering or data acquisition functions.
SustainedLowLatency ガベージ コレクターからの割り込みにより重大な影響を受け、高速性を必要とする、さほど処理時間を必要としないものの長時間になる可能性のある操作を実行するアプリケーションの場合に使用します。For applications that have time-sensitive operations for a contained but potentially longer duration of time during which interruptions from the garbage collector could be disruptive. たとえば、取引時間中に市場データの変化に応じて迅速な応答時間を必要とするアプリケーションなどがあります。For example, applications that need quick response times as market data changes during trading hours.

このモードでは、マネージド ヒープのサイズが他のモードより大きくなります。This mode results in a larger managed heap size than other modes. マネージド ヒープは最適化されないため、断片化の割合が高くなる可能性があります。Because it does not compact the managed heap, higher fragmentation is possible. 十分なメモリが使用可能であることを確認してください。Ensure that sufficient memory is available.

待機時間の短いモードの使用に関するガイドラインGuidelines for Using Low Latency

LowLatency モードを使用する場合は、次のガイドラインを検討してください。When you use LowLatency mode, consider the following guidelines:

  • 待機時間を短くする期間は、できるだけ短くします。Keep the period of time in low latency as short as possible.

  • 待機時間を短くする期間中は、大量のメモリを割り当てないようにします。Avoid allocating high amounts of memory during low latency periods. ガベージ コレクションによって再利用されるオブジェクトの数が少なくなるため、メモリ不足の通知が発生する可能性があります。Low memory notifications can occur because garbage collection reclaims fewer objects.

  • 待機時間の短いモードの間は、割り当ての数、特に大きなオブジェクト ヒープや固定されたオブジェクトへの割り当ての数を最小限に抑えます。While in the low latency mode, minimize the number of allocations you make, in particular allocations onto the Large Object Heap and pinned objects.

  • 割り当てられる可能性のあるスレッドに注意します。Be aware of threads that could be allocating. LatencyMode プロパティの設定はプロセス全体に適用されるため、割り当てられた他のスレッドで OutOfMemoryException が発生する可能性があります。Because the LatencyMode property setting is process-wide, you could generate an OutOfMemoryException on any thread that may be allocating.

  • 待機時間の短いコードを制約された実行領域にラップします (詳細については、「制約された実行領域」を参照してください)。Wrap the low latency code in constrained execution regions (for more information, see Constrained Execution Regions).

  • 待機時間を短くする期間中でも、GC.Collect(Int32, GCCollectionMode) メソッドを呼び出せばジェネレーション 2 のガベージ コレクションを強制できます。You can force generation 2 collections during a low latency period by calling the GC.Collect(Int32, GCCollectionMode) method.

関連項目See also