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).

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