PLINQ
PLINQ yazısına taşıdım.
Parallel Sınıfı
PLINQ yazısına taşıdım.
Parallel Sınıfı
Bu sınıf ile PLINQ ayrı şeyler ancak benzer işler yaptıkları için aynı sayfaya koymanın doğru olacağını düşündüm.
Parallel
Bu sınıf paralel çalışabilen döngülerin gerçekleştirildiği yer. Zaten 3 tane metodu var. For(), ForEach() ve Invoke()
ForEach
Bu metod Parallel sınıfının
bir metodu ve verilen IEnumerable parametresindeki her bir eleman için
paralel işlem yapabilmemizi sağlıyor. Bu metodun bir çok overload edilmiş hali bulunuyor. En basit imzalı metod aşağıda.
Bu metod ile PLINQ.ForAll
metodları benzeşiyorlar. Bu metodu kullanırken dikkat edilmesi gereken
bir nokta metodu çağıran thread'in de foreach döngüsünden bir tanesi
için kullanıldığı. Dolayısıyla GUI thread'inden çağırılırsa burada
anlatıldığı gibi kullanıcı arayüzü donabilir. Çözüm olarak
ForEach döngüsünü çağıran kodu Task.Factory.StartNew metodu ile
çağırmak önerilmiş.
Burada
verilen örnekte Parallel kütüphanesinin ThreadPool
sınıfı ile direkt çalışmaktan daha kolay olduğu görülebilir.
Invoke
Bu metod ile verilen Action nesneleri paralel olarak çalıştırılır. Aşağıda bir örnek bulunuyor.
ParallelOptions
ParallelOptions sınıfı ile yukarıda PLINQ ile anlatılan kaç tane çekirdeğin kullanılacağını atamak mümkün.
var parallelOptions = new ParallelOptions();
parallelOptions.MaxDegreeOfParallelism = Math.Max(Environment.ProcessorCount / 2, 1);
Hiç yorum yok:
Yorum Gönder