SORU
15 ŞUBAT 2011, Salı


Paralel.Dosyalarda grup vs Görev.Fabrika.StartNew

Aşağıda kod parçacıkları arasındaki fark nedir? Hem havuzu iş parçacığı kullanarak olmayacak mı?

Örneğin eğer koleksiyonundaki her öğe için bir fonksiyon çağırmak istiyorum

Parallel.ForEach<Item>(items, item => DoSomething(item));

vs

foreach(var item in items)
{
  Task.Factory.StartNew(() => DoSomething(item));
}

CEVAP
15 ŞUBAT 2011, Salı


İlk çok daha iyi bir seçenektir.

Paralel.Dosyalarda grup, DAHİLİ olarak, Partitioner<T> bir iş öğeleri içine koleksiyonunu dağıtmak için kullanır. Her madde için bir görev, ancak bunun yerine bu yükü dahil düşürmek için parti değil.

İkinci seçenek koleksiyonundaki her öğe için Task tek bir zamanlama olacak. Sonuçları (neredeyse) aynı olacak olsa da, bu çok daha fazla yükü daha gerekli, özellikle büyük koleksiyonlarını tanıtacak ve genel çalışma zamanları daha yavaş olmasına neden olur.

BİLGİNİZE - Bölümleme uygun kullanılarak kontrol edilebilir kullanılan overloads to Parallel.ForEach, arzu ederseniz. Ayrıntılar için şu Web sitesini ziyaret Custom Partitioners bkz.

Temel fark, zamanında, ikinci hareket edecek uyumsuz. Bu Paralel kullanarak çoğaltılabilir.Yaparak dosyalarda grup için:

Task.Factory.StartNew( () => Parallel.ForEach<Item>(items, item => DoSomething(item)));

Bunu yaparak, sen hala partitioners yararlanmak, ancak bu işlem tamamlanana kadar blok yok.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • gsmaestro

    gsmaestro

    17 AĞUSTOS 2006
  • Joseph Hayhoe

    Joseph Hayho

    20 Mayıs 2010
  • RFS Dan

    RFS Dan

    22 Temmuz 2014