다음을 통해 공유


BigInteger 최대 길이

.NET 9는 최대 길이 BigInteger를 적용합니다. 즉, 비트는 (약 21억 4천만 비트) 이하 (2^31) - 1 를 포함할 수 있습니다. 이러한 숫자는 거의 256MB 할당을 나타내며 약 6억 4,650만 숫자를 포함합니다. 이 새로운 제한은 노출되는 모든 API가 잘 작동하고 일관적인 동시에 대부분의 사용 시나리오를 훨씬 초과하는 숫자를 허용하도록 합니다.

이전 동작

이전에는 길이가 최대 Array.MaxLength * 32 비트인 값을 변수에 할당할 BigInteger 수 있습니다.

참고 항목

일반적인 컴퓨터는 이 제한에 OutOfMemoryException 도달하기 훨씬 전에 도달합니다.

새 동작

.NET 9 BigInteger 부터 최대 길이 (2^31) - 1 는 약 21억 4천만 비트입니다. 더 큰 값을 할당하려고 하면 런타임에 OverflowException 예외가 발생합니다. 예를 들어 다음 코드는 예외를 throw합니다.

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

도입된 버전

.NET 9 미리 보기 6

호환성이 손상되는 변경의 형식

이 변경 사항은 동작 변경입니다.

변경 이유

BigInteger 는 기본적으로 임의 길이의 정수 값을 나타내는 것을 지원합니다. 그러나 실제로 사용 가능한 메모리 또는 지정된 식을 계산하는 데 걸리는 시간 등 기본 컴퓨터의 제한으로 길이가 제한됩니다. 또한 지정된 입력에 실패하는 일부 API가 있어 값이 너무 큽니다. 이러한 이유로 이제 최대 길이가 적용됩니다.

코드가 영향을 받는 경우 할당할 값의 길이를 BigInteger 줄이거나 길이 검사를 추가합니다.

영향을 받는 API