GC.GetGeneration gibt möglicherweise „Int32.MaxValue“ zurück

Ab .NET 8 kann GC.GetGeneration bei Objekten, die auf Nicht-GC-Heaps (auch als „eingefrorene“ Heaps bezeichnet) zugeordnet sind, Int32.MaxValue zurückgeben, während zuvor 2 zurückgegeben wurde. Wann und wie die Runtime Objekte zu Nicht-GC-Heaps zuordnet, ist ein internes Implementierungsdetail. Zeichenfolgenliterale werden z. B. auf einem Nicht-GC-Heap zugeordnet und der folgende Methodenaufruf könnte Int32.MaxValue zurückgeben.

int gen = GC.GetGeneration("string");

Vorheriges Verhalten

Zuvor hat GC.GetGeneration ganzzahlige Werte im Bereich von 0 bis 2 zurückgegeben.

Neues Verhalten

Ab .NET 8 kann GC.GetGeneration einen Wert von 0, 1, 2 oder Int32.MaxValue zurückgeben.

Eingeführt in Version

.NET 8 Vorschauversion 4

Typ des Breaking Changes

Diese Änderung ist eine Verhaltensänderung.

Grund für die Änderung

.NET hat eine neue, Nicht-GC-Art von Heap eingeführt, die sich geringfügig von den vorhandenen Heaps unterscheidet, die Large Object-Heap (LOH), Small Object-Heap (SOH) und Pinned Object-Heap (POH) sind.

Stellen Sie sicher, dass Sie den Rückgabewert von GC.GetGeneration() nicht als Arrayindexer oder für etwas anderes verwenden, bei dem Int32.MaxValue unerwartet ist.

Betroffene APIs