Lunghezza massima BigInteger
.NET 9 applica una lunghezza massima di BigInteger, ovvero che non può contenere più di (2^31) - 1
(circa 2,14 miliardi) bit. Tale numero rappresenta un'allocazione di quasi 256 MB e contiene circa 646,5 milioni di cifre. Questo nuovo limite garantisce che tutte le API esposte siano ben comportate e coerenti, consentendo comunque numeri che superano la maggior parte degli scenari di utilizzo.
Comportamento precedente
In precedenza, è possibile assegnare un valore con una lunghezza fino a bit a Array.MaxLength * 32
una BigInteger variabile.
Nota
I computer tipici raggiungono un OutOfMemoryException livello di tempo prima che questo limite possa essere raggiunto.
Nuovo comportamento
A partire da .NET 9, BigInteger ha una lunghezza massima di (2^31) - 1
circa 2,14 miliardi di bit. Se si tenta di assegnare un valore maggiore, viene generata un'eccezione OverflowException in fase di esecuzione. Ad esempio, il codice seguente genera un'eccezione:
BigInteger bigInt = new BigInteger(-1) << int.MaxValue;
Versione introdotta
.NET 9 Anteprima 6
Tipo di modifica che causa un'interruzione
Questa è una modifica funzionale.
Motivo della modifica
BigInteger supporta la rappresentazione di valori interi di lunghezza essenzialmente arbitraria. Tuttavia, in pratica, la lunghezza è vincolata dai limiti del computer sottostante, ad esempio la memoria disponibile o il tempo necessario per calcolare una determinata espressione. Esistono anche alcune API che hanno esito negativo dato input che generano un valore troppo grande. Per questi motivi, viene applicata una lunghezza massima.
Azione consigliata
Se il codice è interessato, ridurre la lunghezza del valore assegnato o BigInteger aggiungere un controllo di lunghezza.