Share via


GC.GetGeneration podría devolver Int32.MaxValue

A partir de .NET 8, GC.GetGeneration podría devolver Int32.MaxValue para objetos asignados en montones que no son de GC (también denominados montones "inmovilizados"), donde anteriormente devolvía 2. El momento y la forma en que el tiempo de ejecución asigna objetos en montones que no son de GC son detalles de implementación internos. Los literales de cadena, por ejemplo, se asignan en un montón que no es de GC, y la siguiente llamada de método podría devolver Int32.MaxValue.

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

Comportamiento anterior

Anteriormente, GC.GetGeneration devolvía valores enteros en el rango de 0 a 2.

Comportamiento nuevo

A partir de .NET 8, GC.GetGeneration puede devolver un valor de 0, 1, 2 o Int32.MaxValue.

Versión introducida

.NET 8 Versión preliminar 4

Tipo de cambio importante

Este es un cambio de comportamiento.

Motivo del cambio

.NET introdujo un nuevo tipo de montón que no es de GC que difiere ligeramente de los montones existentes, a saber, el montón de objetos grandes (LOH), el montón de objetos pequeños (SOH) y el montón de objetos anclados (POH).

Asegúrese de que no usa el valor devuelto de GC.GetGeneration() como un indizador de matriz o para cualquier otra cosa donde Int32.MaxValue sea inesperado.

API afectadas