GC.GetGeneration potrebbe restituire Int32.MaxValue
A partire da .NET 8, GC.GetGeneration potrebbe restituire Int32.MaxValue per gli oggetti allocati su heap non GC (detti anche heap "congelati"), in cui in precedenza restituiva 2. Quando e come il runtime alloca oggetti sugli heap non GC è un dettaglio di implementazione interno. I valori letterali stringa, ad esempio, vengono allocati in un heap non GC e la chiamata al metodo seguente potrebbe restituire Int32.MaxValue.
int gen = GC.GetGeneration("string");
Comportamento precedente
In precedenza, GC.GetGeneration restituiva valori interi nell'intervallo compreso tra 0 e 2.
Nuovo comportamento
A partire da .NET 8, GC.GetGeneration può restituire un valore pari a 0, 1, 2 o Int32.MaxValue.
Versione di introduzione
.NET 8 Anteprima 4
Tipo di modifica che causa un'interruzione
Questa è una modifica funzionale.
Motivo della modifica
.NET ha introdotto un nuovo tipo di heap non GC leggermente diverso dagli heap esistenti, che sono LOH (Large Object Heap), SOH (Small Object Heap) e PoH (Pinned Object Heap).
Azione consigliata
Assicurarsi di non usare il valore restituito da GC.GetGeneration()
come indicizzatore di matrici o per qualsiasi altro elemento in cui Int32.MaxValue sia imprevisto.
API interessate
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per