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).
Zalecana akcja
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
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla