Freigeben über


BigInteger maximale Länge

.NET 9 erzwingt eine maximale Länge von BigInteger, d. h., dass sie nicht mehr als (2^31) - 1 (ca. 2,14 Milliarden) Bits enthalten kann. Eine solche Zahl stellt eine fast 256 MB Zuordnung dar und enthält ca. 646,5 Millionen Ziffern. Diese neue Grenze stellt sicher, dass alle APIs, die verfügbar gemacht werden, sich gut verhalten und konsistent sind und gleichzeitig Zahlen zulassen, die weit über die meisten Nutzungsszenarien hinausgehen.

Vorheriges Verhalten

Zuvor konnten Sie einer BigInteger-Variablen einen Wert mit einer Länge bis zu Array.MaxLength * 32 Bits zuweisen.

Hinweis

Typische Maschinen würden eine OutOfMemoryException weit vor Erreichen dieses Grenzwerts erreichen.

Neues Verhalten

Ab .NET 9 hat BigInteger eine maximale Länge von (2^31) - 1 (ca. 2,14 Milliarden) Bits. Wenn Sie versuchen, einen größeren Wert zuzuweisen, wird zur Laufzeit ein OverflowException-Fehler ausgelöst. Der folgende Code löst z. B. eine Ausnahme aus:

BigInteger bigInt = new BigInteger(-1) << int.MaxValue;

Eingeführt in Version

.NET 9 Preview 6

Typ des Breaking Changes

Diese Änderung ist eine Verhaltensänderung.

Grund für die Änderung

BigInteger unterstützt die Darstellung ganzzahliger Werte von im Wesentlichen beliebiger Länge. In der Praxis wird die Länge jedoch durch Grenzwerte des zugrunde liegenden Computers eingeschränkt, z. B. verfügbarer Arbeitsspeicher oder wie lange es dauert, einen bestimmten Ausdruck zu berechnen. Darüber hinaus gibt es einige APIs, die aufgrund von Eingaben fehlschlagen, die zu einem zu großen Wert führen. Aus diesen Gründen wird nun eine maximale Länge erzwungen.

Wenn Ihr Code betroffen ist, verringern Sie die Länge des Werts, den Sie zuweisen BigInteger, oder fügen Sie eine Längenüberprüfung hinzu.

Betroffene APIs