하나의 피트가 떨어지면 세트에서 주문을 활용할 수있는 능력을 잃게됩니다.
다음 코드를 보자
var results = new int { 0 ,1 ,2 ,3 };
var doSomethingSpecial = (from r in results.AsParallel() select r/2).ToArray();
당신은 결과가 집합의 순열이 될 수있는 결과 있도록 위해 오는 셀 수 없다. 이것은 가장 큰 함정 중 하나입니다. 주문 데이터를 다루는 경우에는 정렬 비용으로 인해 성능상의 이점을 잃을 수 있습니다.
또 다른 문제는 알려진 예외를 포착 할 수 없게된다는 것입니다. 그래서 널 포인터 예외를 잡을 수 없었습니다 (당신이 그렇게해야한다는 말은하지 않습니다) 또는 FormatException을 잡을 수도 있습니다.
모든 경우에 항상 Plinq을 사용하지 않아야하는 이유로 많은 이유가 있으며, 하나만 더 강조하겠습니다. "병렬이 아닌 Linq의 자동 사용"으로 uch를 읽지 마십시오. 쿼리가 단순한 배리어 케이스 만 처리하거나 병렬로 실행하기에는 너무 복잡합니다.
항상 PLINQ를 사용하면 서버에서 소비하는 리소스가 많아지며 실행중인 다른 스레드로부터 제거됩니다.
자료 :
MSDN PLNQ white paper
보장을 위해 Paul Kimmel on PLINQ
출처
2010-05-23 23:17:02
Nix
을 주문 할 수있는 단지 AsOrdered() 당신은 분명이 추가 않기 때문에 당신이 당신의 알고리즘에 아무것도 얻을 수 있는지 확인하기 위해 측정해야하지만 간접비. 예외적으로 InnerException * s * 속성을 통해 발생한 개별 예외를 얻을 수있는 병렬 처리 실행에서 아무 것도 발생하면 AggregateException이 발생합니다. 모든 기술과 마찬가지로, 실제로 이점을 얻을 수 있는지를 확인하는 유일한 방법은 실제 세계에서 처리 할 대상을 나타내는 데이터 세트를 사용하여 실제로 측정하는 것입니다. –