Partager via


GC.GetGeneration peut renvoyer Int32.MaxValue

À partir de .NET 8, GC.GetGeneration peut renvoyer Int32.MaxValue pour les objets alloués sur des tas non-GC (également appelés tas « gelés »), au lieu de 2 auparavant. Quand et comment le runtime alloue des objets sur des tas non-GC est un détail d’implémentation interne. Les littéraux de chaîne, par exemple, sont alloués sur un tas non-GC et l’appel de méthode suivant peut renvoyer Int32.MaxValue.

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

Comportement précédent

Auparavant, GC.GetGeneration renvoyait des valeurs entières dans la plage 0-2.

Nouveau comportement

À partir de .NET 8, GC.GetGeneration peut renvoyer la valeur 0, 1, 2 ou Int32.MaxValue.

Version introduite

.NET 8 Preview 4

Type de changement cassant

Ce changement est un changement de comportement.

Raison du changement

.NET a introduit un nouveau type de tas non-GC qui est légèrement différent des tas existants, à savoir le tas de grands objets (LOH), le tas de petits objets (SOH) et le tas d’objets épinglés (POH).

Vérifiez que vous n’utilisez pas la valeur renvoyée par GC.GetGeneration() comme indexeur de tableau, ou pour tout autre chose où Int32.MaxValue n’est pas attendu.

API affectées