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.
Empfohlene Maßnahme
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.