GC.GetGeneration が Int32.MaxValue を返す場合があります
.NET 8 以降では、GC 以外のヒープ ("固定" ヒープとも呼ばれます) に割り当てられているオブジェクトに対して、GC.GetGeneration が Int32.MaxValue を返す場合があります (以前は 2 を返していました)。 ランタイムによって GC 以外のヒープにオブジェクトが割り当てられるタイミングと方法は、内部の実装の詳細です。 たとえば、文字列リテラルは、GC 以外のヒープに割り当てられ、次のメソッド呼び出しが Int32.MaxValue を返す場合があります。
int gen = GC.GetGeneration("string");
以前の動作
以前は、GC.GetGeneration が、整数値を 0 から 2 の範囲で返していました。
新しい動作
.NET 8 以降では、GC.GetGeneration は、0、1、2 または Int32.MaxValue の値を返すことができます。
導入されたバージョン
.NET 8 Preview 4
破壊的変更の種類
この変更は、動作変更です。
変更理由
.NET では、ラージ オブジェクト ヒープ (LOH)、スモール オブジェクト ヒープ (SOH)、固定されたオブジェクト ヒープ (POH) という既存のヒープとは少々異なる、GC 以外の新しい種類のヒープが導入されました。
推奨される操作
GC.GetGeneration()
からの戻り値を、配列インデクサーとして、または Int32.MaxValue が予期されていない場合にはそれ以外のものとして使用していないことを確認します。
影響を受ける API
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET