Bir çukur fall setlerle sipariş kaldıraç yeteneğini kaybedebilir olduğunu.
Aşağıdaki kodu atın:
var results = new int { 0 ,1 ,2 ,3 };
var doSomethingSpecial = (from r in results.AsParallel() select r/2).ToArray();
Sonuçların kümesinin herhangi permütasyon olabilir sonucunda böylece sırayla gelen güvenemeyiz. Bu, sipariş verisi ile uğraşırken, sıralama maliyetinden dolayı performans avantajlarını kaybedebilirseniz, en büyük tuzaklardan biridir.
diğer konu Bilinen durumları yakalamak yeteneğini kaybedebilir olduğunu. Bu yüzden boş bir işaretçi istisnası yakalayamadım (bunu yapmanız gerektiğini söylemiyordum), hatta bir FormatException yakaladım.
her zaman her durumda PLINQ kullanmamalısınız neden reasonse bir ton vardır, ve ben sadece bir tane daha vurgulayacaktır. "Paralel olmayan Linq'in otomatik kullanımı" konusuna çok fazla okuma yapmayın, yalnızca sorgulamanın basit olduğu ya da paralel çalışacak kadar karmaşık olacağı engel durumlarını ele alabilir.
daima daha kullanımı, diğer çalışan iş parçacığı uzak alıyor sunucuda tüketen olacak daha fazla kaynak, PLINQ unutmayın.
Kaynaklar:
MSDN PLNQ white paper
garanti için Paul Kimmel on PLINQ
emrediyor can sadece AsOrdered() sen bu eklese beri size algoritmada şey elde olmadığını öğrenmek ölçmek gerekir gerçi havai. İstisnalar haricinde, InnerException * s * özelliğiyle gerçekleşen bireysel istisnaları elde edebileceğiniz paralelleştirilmiş uygulamada bir şey olursa bir AggregateException alırsınız. Her teknolojide olduğu gibi, size fayda sağlayıp sağlayamayacağını bilmenin tek yolu, gerçek dünyada neleri işleyeceğinizi temsil eden veri kümelerini kullanmaktır. –