먼저 최적화는 직접 Length
속성을 사용할 수 있습니다 byte[]
, 여기에 LINQ를 방지 ToByteArray()
반환하는 것입니다
int est = myBigInt.ToByteArray().Length;
이것은, 그러나, 여전히 차선 ToByteArray()
때문에 클론 내부 buffer.For 을 매우 거대한 번호 Reflection을 사용하여 더 나은 장기 성능을 보일 수도 있습니다 :
var bits = typeof(BigInteger).GetField("_bits",
BindingFlags.Default | BindingFlags.NonPublic);
int size = ((uint[])bits.GetValue(myBigInt)).Length * sizeof(uint);
,451,515,
주 속성 이름과 타입 ... 변경 적절한 단위 테스트 추가 될 다음 상세한 구현되고 내부 버퍼 sizeof(uint)
바이트의 배수이기 때문
은 또한 (
ToByteArray().Length
내부 버퍼가 다를 수 있음을 유의 마지막으로 배열 항목은 내부
Length()
메소드 구현을 참조 비어있을 수 있습니다.)
는 이러한 모든 당신은 +/- 1000X (!) 추정 엄청난 숫자와 협력하지 않는 한 올렉산드르 Pshenychnyy에서 funny comment이 잘못되지 않습니다 말했다 충분하다면 16 바이트 (또는 32 또는 64 ...)의 일정한 크기를 사용할 수 있습니다. 매우 큰 정수를 수용하기에 충분해야합니다 (도 참조하십시오).) ...
'double est4 = 1000; 'Quick and rough =) –
진지하게 말하면 개인 배열의 길이에 리플렉션하여 액세스 할 수 있습니다. 리플렉션은 천천히하지만 백만 자리 값을 사용하는 수학 연산보다 확실히 빠릅니다. –
반향에 신경 쓰지 않는다면 'BigInteger.Length (myBigInt._Bits)'가됩니다. 그러나 두 멤버 모두 내부적입니다. 리플렉션을 염두에두고 일종의 상위 범위를 가졌다면'.Log'보다 훨씬 빠른 '.CompareTo'를 사용하여 연속 비교를 시도해 볼 수 있습니다. –