2016-09-22 9 views
0

PLINQ는 오버 헤드를 줄이기 위해 내부적으로 항목을 배치합니다. 내 항목은 매우 메모리 집약적이므로 PLINQ 쿼리 파이프 라인에있는 버퍼링을 최소화하고 싶습니다. 분할/일괄 처리를 완전히 비활성화하려면 어떻게합니까?PLINQ 분할/일괄 처리를 비활성화하는 방법

코드는 다음과 같습니다

내가 할 가비지 수집 대상에서 제외됩니다 (큰) 항목의 최대 수를 기대할 수있는이 코드에서
var myItems = Enumerable.Range(0, 10000000).Select(_ => new byte[1 << 30]); 
var results = 
myItems 
.AsParallel() 
.WithMaxDegreeOfParallelism(4) 
.Select(F) 
.ToList(); 

당신이 원하는 무엇 4.

+0

어떤 코드를 포함하여 무엇을하고 있는지 더 자세히 설명해 주시겠습니까? PLINQ에는 여러 종류의 일괄 처리가 있으며 여러 가지 방법으로 비활성화 할 수 있습니다. – svick

+0

@svick 바로 코드를 제공해야합니다. 희망이 도움이됩니다. – boot4life

답변

1

var myItems = Enumerable.Range(0, 1000).Select(_ => new byte[1 << 30]); 
var myPartitioner = Partitioner.Create(myItems, EnumerablePartitionerOptions.NoBuffering); 
var results = 
    myPartitioner 
    .AsParallel() 
    .WithDegreeOfParallelism(4) 
    .Select(F) 
    .ToList(); 
이 쿼리는 나를 위해 작동

하지만이 01,231 예외 : 할 수는 NoBuffering를 지정하고 다음 PLINQ 쿼리에서 그것을 사용하는 소스 위에 create a Paritioner이다(원래 쿼리와 마찬가지로) 분할자를 건너 뛸 경우.