GC. Polecenie GetGeneration może zwrócić wartość Int32.MaxValue

Począwszy od platformy .NET 8, GC.GetGeneration może zostać zwrócony Int32.MaxValue dla obiektów przydzielonych na stertach innych niż GC (nazywanych również "zamrożonymi" sterty), gdzie wcześniej zwrócił 2. Kiedy i jak środowisko uruchomieniowe przydziela obiekty na stercie innych niż GC, jest szczegółem implementacji wewnętrznej. Literały ciągów, na przykład, są przydzielane na stercie innej niż GC, a następujące wywołanie metody może zwrócić wartość Int32.MaxValue.

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

Poprzednie zachowanie

GC.GetGeneration Wcześniej zwrócone wartości całkowite w zakresie od 0 do 2.

Nowe zachowanie

Począwszy od platformy .NET 8, GC.GetGeneration może zwrócić wartość 0, 1, 2 lub Int32.MaxValue.

Wprowadzona wersja

.NET 8 (wersja zapoznawcza 4)

Typ zmiany powodującej niezgodność

Ta zmiana jest zmianą behawioralną.

Przyczyna wprowadzenia zmiany

Platforma .NET wprowadziła nowy, inny niż GC rodzaj sterty, który nieco różni się od istniejących sterty obiektów, które są dużym stertą obiektów (LOH), stertą małych obiektów (SOH) i przypiętymi stertami obiektów (POH).

Upewnij się, że nie używasz wartości zwracanej z GC.GetGeneration() klasy jako indeksatora tablicy lub dla niczego innego, gdzie Int32.MaxValue jest nieoczekiwane.

Dotyczy interfejsów API