Longueur maximale de BigInteger
.NET 9 applique une longueur maximale de BigInteger, c’est-à-dire qu’elle ne peut contenir pas plus de (2^31) - 1
bits (environ 2,14 milliards). Ce nombre représente une allocation de près de 256 Mo et contient environ 646,5 millions de chiffres. Cette nouvelle limite garantit que toutes les API exposées se comportent bien et restent cohérentes tout en autorisant des nombres bien au-delà de la plupart des scénarios d’utilisation.
Comportement précédent
Auparavant, vous pouvez affecter une valeur dont la longueur est jusqu’à Array.MaxLength * 32
bits à une variable BigInteger .
Remarque
Les machines typiques atteignent une OutOfMemoryException bien avant que cette limite ne soit atteinte.
Nouveau comportement
À compter de .NET 9, BigInteger a une longueur maximale de (2^31) - 1
bits (environ 2,14 milliards). Si vous tentez d’affecter une valeur supérieure, une OverflowException est levée au moment de l’exécution. Par exemple, le code suivant lève une exception :
BigInteger bigInt = new BigInteger(-1) << int.MaxValue;
Version introduite
.NET 9 Preview 6
Type de changement cassant
Ce changement est un changement de comportement.
Raison du changement
BigInteger prend en charge la représentation de valeurs entières d’une longueur essentiellement arbitraire. Toutefois, dans la pratique, la longueur est limitée par l’ordinateur sous-jacent, telles que la mémoire disponible ou le temps nécessaire pour calculer une expression donnée. En outre, il existe certaines API qui échouent quand elles reçoivent des entrées qui entraînent une valeur trop importante. Pour ces raisons, une longueur maximale est désormais appliquée.
Action recommandée
Si votre code est affecté, réduisez la longueur de la valeur que vous affectez à BigInteger ou ajoutez une vérification de longueur.