Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
.NET 9 vynucuje maximální délku BigInteger, což znamená, že nesmí obsahovat více než (2^31) - 1 (přibližně 2,14 miliardy bitů). Takové číslo představuje téměř 256 MB přidělení a obsahuje přibližně 646,5 milionu číslic. Tento nový limit zajišťuje, že se všechna vystavená rozhraní API dobře chovají a konzistentně a zároveň umožňují čísla, která jsou daleko nad rámec většiny scénářů použití.
Předchozí chování
Dříve můžete k proměnné přiřadit hodnotu s délkou až do Array.MaxLength * 32 bitů BigInteger .
Poznámka:
Typické počítače by narazily OutOfMemoryException daleko před dosažením tohoto limitu.
Nové chování
Počínaje verzí .NET 9 BigInteger má maximální délku (2^31) - 1 (přibližně 2,14 miliardy bitů). Pokud se pokusíte přiřadit větší hodnotu, za běhu programu se vyvolá OverflowException. Například následující kód vyvolá výjimku:
BigInteger bigInt = new BigInteger(-1) << int.MaxValue;
Zavedená verze
.NET 9 Preview 6
Typ zásadní změny
Tato změna je změna chování.
Důvod změny
BigInteger podporuje reprezentaci celočíselné hodnoty v podstatě libovolné délky. V praxi je však délka omezena omezeními základního počítače, jako je dostupná paměť nebo jak dlouho by výpočet daného výrazu trvalo. Kromě toho existují některá rozhraní API, která selžou vzhledem ke vstupům, které vedou k příliš velké hodnotě. Z těchto důvodů se teď vynucuje maximální délka.
Doporučená akce
Pokud je váš kód ovlivněný, snižte délku hodnoty, ke BigInteger které přiřazujete, nebo přidejte kontrolu délky.