2012-11-14 4 views
2

Parallel.For는 최대 long.MaxValue임의로 긴 Parallel.For는 C# .NET에서 루프

Parallel.For(long fromInclusive, long toExclusive, Action<long> body) 
{ 
} 

의 반복하지만보다 훨씬 더 반복을 것이다 병렬 루프를 수행해야하는 경우 것과 루프를 할 수 있습니다 오래 .MaxValue?

E.G. 필요한 반복 횟수를 BigInteger로 반환하는 함수가 있습니다 (long 및 ulong이 충분히 크지 않기 때문에).

"내 자신의"Parallel.For 구현해야합니까? 내 직감은 이것이 나쁜 습관이 될 것이라는 점이다!

EDIT : 다양한 의견을 바탕으로 ... 나는 내가 씹을 수있는 것보다 더 물린 것 같아요!

+0

는 사용할 수 없습니다 해결책이 될 수 있습니다해야하는 경우'Parallel.ForEach'는 경우에 당신은 열거 다루고있다? –

+0

@ RV1987, BigInteger를 열거 형으로 표현할 수 있다면 그렇습니다. 어떻게 할 수 있는지 알고 있다면 ... 알려주세요! – series0ne

+8

9,223,372,036854775807 개 이상의 반복 작업을 수행하고 있습니까? – davenewza

답변

2

나는 @davenewza에 동의하지만 , 이것은

Parallel.ForEach(BigIntSequence(1,10), (i) => Console.WriteLine(i)); 

public IEnumerable<BigInteger> BigIntSequence(BigInteger min,BigInteger max) 
{ 
    BigInteger bi = min; 
    while (bi<max) 
    { 
     yield return bi; 
     bi += 1;  
    } 
} 
+0

이것은 작동하는 것으로 보이지만 명시된 바와 같이 결과는 매우 긴 프로세스입니다! – series0ne

4

Int64.MaxValue은 9,223,372,036854775807입니다.

반복을 더 수행해야하는 경우 디자인을 다시 고려해야합니다.

+0

문제는, 나는 1024 바이트의 BigInteger에로드 중이고 숫자로 취급하고있다. 그런 다음 BigInteger의 값을 0에서 루프하여 모든 요소를 ​​찾아야한다. 이것이 어떻게 달성 될 수 있는지 생각해보십시오. 그리고 틀림없이, 이것은 천천히 진행될 것입니다! – series0ne

+0

@activewerx 분명 할 지 모르겠지만 다음과 같이 언급 할 것입니다. 인수를 지정하는 경우 sqrt (yourBigNumber)로 루프해야합니다. – Rune