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
İ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.
Havuzu.Queueuserworkıtem vs Görev.Fabr...
'' Paralel devam etmek için ...
Nasıl Paralel sınırlayabilir miyim.Dos...
İş parçacığı oluşturma - Görev.Fabrika...
Nasıl Paralel olana kadar bekleyebilir...