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).
Action recommandée
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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour