2010-05-23 31 views
16

PLinq'in daha pahalı olması için PLinq bulması halinde paralel olmayan Linq'i otomatik olarak kullanacağını okudum. Öyleyse neden PLinq'i her şey için kullanmamayı (mümkün olduğunda) ve çalışma zamanının hangisinin kullanılacağına karar vermesini düşündüm.Tüm Linq sorgularında Plinq kullanmayı denemek tamam mı?

uygulamalar çok çekirdekli sunucuları dağıtıldığında ve paralellik başa biraz daha fazla kod geliştirmek için OK duyuyorum edilecektir.

varsayılan olarak PLINQ kullanmanın tuzaklar nelerdir?

cevap

9

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

+2

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. –

İlgili konular