GC.GetGeneration pode retornar Int32.MaxValue

Começando no .NET 8, GC.GetGeneration pode retornar Int32.MaxValue para objetos alocados em heaps não GC (também chamados de heaps "congelados"), que anteriormente retornava 2. Quando e como o runtime aloca objetos em heaps não GC é um detalhe de implementação interno. Literais de cadeia de caracteres, por exemplo, são alocados em um heap não GC e a chamada de método a seguir pode retornar Int32.MaxValue.

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

Comportamento anterior

Anteriormente, GC.GetGeneration retornava valores inteiros no intervalo de 0 a 2.

Novo comportamento

Começando no .NET 8, GC.GetGeneration pode retornar um valor de 0, 1, 2 ou Int32.MaxValue.

Versão introduzida

.NET 8 versão prévia 4

Tipo de alteração interruptiva

Esta é uma alteração comportamental.

Motivo da alteração

O .NET introduziu um novo tipo de heap não GC ligeiramente diferente dos heaps existentes, que são LOH (heap de objetos grandes), SOH (heap de objetos pequenos) e POH (heap de objetos fixados).

Verifique se você não está usando o valor retornado de GC.GetGeneration() como um indexador de matriz ou para qualquer outra coisa em que Int32.MaxValue é inesperado.

APIs afetadas