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).
Ação recomendada
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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de