GC.RegisterForFullGCNotification
GC 通知を受け取りたい場合 (たとえば、収集中にノード間で負荷を転送する場合)、 、 、GC.WaitForFullGCApproach
およびの 3 つのメソッドを使用できますが、GC.WaitForFullGCComplete
に渡されるパラメーターはGC.RegisterForFullGCNotification
ほとんど意味がないように見えます。適切な値を選択する方法について説明します。ここからのように、あいまいなメモがあります:
maxGenerationThreshold および largeObjectHeapThreshold パラメーターを指定するには、次のガイドラインを使用します。
しきい値が大きいほど、コレクションが発生する可能性が高くなり、通知が早く発生します。
しきい値が大きいほど、ランタイムが近づいているコレクションをチェックする機会が増えます。これにより、通知される可能性が高くなります。ただし、しきい値を高く設定しすぎると、ランタイムが次のコレクションを誘導するまでの待機時間が長くなるため、設定しないでください。
高いしきい値を使用して通知時に自分でコレクションを誘導すると、ランタイムの次のコレクションによって回収されるよりも多くのオブジェクトが回収されます。
しきい値が小さいほど、収集が早く行われ、通知が遅くなる可能性が高くなります。
またはここから
maxGenerationThreshold
ジェネレーション 2 でプロモートされたオブジェクトに基づいて、いつ通知を発生させるかを指定する 1 から 99 までの数値。
largeObjectHeapThreshold
大きなオブジェクト ヒープに割り当てられているオブジェクトに基づいて、いつ通知を発生させるかを指定する 1 ~ 99 の数値。大きすぎる値を指定すると、通知を受け取る可能性は高くなりますが、ランタイムがコレクションを開始するまでの待機時間が長すぎる可能性があります。自分でコレクションを誘導すると、ランタイムによってコレクションが発生した場合に回収されるよりも多くのオブジェクトが回収される可能性があります。
小さすぎる値を指定すると、通知を受けるのに十分な時間が経過する前に、ランタイムによってコレクションが発生する可能性があります。
ただし、「高すぎず、低すぎない」ことを除いて、それは賢明な/正しい数値を選択するのに実際には役立ちません.
現在、提供されているいくつかの例の1つを使用しています。
// these are magic numbers; nobody really knows what they mean...
GC.RegisterForFullGCNotification(10, 10);
10
しかし... が正しい選択なのか、10
恣意的な選択なのか、特定の使用シナリオを反映するためにこれをどのように変更すべきなのかは非常に不明です。
だから:これらの数字を選ぶ正しい方法はありますか?それとも、イベントの取得が早すぎる/遅すぎるかどうかに基づいて、試行錯誤しているだけですか?