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.
Empfohlene Maßnahme
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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für