bikral 1
bikral
ShadowFon 1
ShadowFon
D 1
delimuratt
PrimeAC 1
PrimeAC
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Best Studio 1
Best Studio
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
romegames 1
romegames
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Altın Konu C# - Parallel.ForEach Nasıl Kullanılır ?

lHezarfeNl

Love Turkmmo
TM Üye
Katılım
26 Ara 2012
Konular
936
Mesajlar
15,646
Çözüm
8
Online süresi
3mo 29d
Reaksiyon Skoru
2,664
Altın Konu
295
Başarım Puanı
327
MmoLira
694
DevLira
0
Ticaret - 100%
5   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

Parallel.ForEach Nedir?​

C#'ta özellikle listeler ve dizilerde işlem yapacağımız zaman sıklıkla kullandığımız foreach döngüsünün çalışma mantığına benzer olan bir de Parallel.ForEach döngüsü vardır. Klasik foreach'ten farkı, dizi elemanlarını sıra ile dönmek yerine tüm elemanları paralel task'lar oluşturup (CPU çekirdekleri uygun olduğu kadar) aynı anda işlenmesini sağlar.

Parallel.ForEach Nasıl Kullanılır?​

System.Threading.Tasks namespace'i kullanacağımız zaman kodumuza referans olarak eklmemiz gerekir.

Döngüye uygun, tüm veri tiplerinde kullanabiliriz.
Kod:
var numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Parallel.ForEach(numbers, num =>
{
    Console.WriteLine(num);
});
Yukarıdaki kodda 10 tane sayı içeren dizimizi Parallel.ForEach yardımıyla ekrana yazdırdık. Çıkan sonuca baktığımızda klasik döngülerden farklı olarak ekrana sayıları sıralı şekilde değil, paralel taskların tamamlanma sırasına göre yazdırıldığını göreceksiniz.

Kodu her çalıştırdığınızda farklı ekrana yazdırma sırası görürsünüz.
1.png

2.png

Ne zaman Parallel.ForEach Kullanmalıyız?​

1. Bu döngünün sihirli bir kod satırı olduğunu kesinlikle düşünmemelisiniz. Çünkü klasik foreach'e göre aşırı yavaş kaldığı durumlar da olabilmekte. O koddaki senaryonuza göre dikkatli bir şekilde kullanmalısınız. Örneğin yukarıdaki gibi az elemanlı sabit bir dizinin elemanlarını ekrana yazdırmak için kullanılması pek tavsiye edilmez. Sadece kod syntax'ını basit şekilde anlatmak için bu şekilde gösterdim.

2. Büyük veri(Big Data) ile işlemler yapıyarsanız, binlik, milyonluk listelerde çalışmanız gerekiyorsa tercih edebilirsiniz.

3. Liste veya diz içindeki kayıtlarının sırasının bir önemi yoksa, her bir kayıt birbirinden bağımsız işlenebilirse tercih edebilirsiniz. (1 ve 2. maddeki koşulları da gözeterek)

4.Ortak paylaşılan bir veriye erişim yoksa tercih edilebilir. Eğer döngü içerisinde ortak bir sınıfa,db'yi vs kullanıyorsanız aynı anda bu veriye erişmeye çalışmak sistemde çakışmalara yol açabilir veya bu kadar isteği kaldırmayabilir.

5. Döngü içerisinde yeni obje ve büyük değişkenler oluşturmuyorsanız tercih edilebilir. Diğer türlü aynı anda bu objeleri oluşturmak bellekte ani ve yüksek bir alan ihtiyacı oluşturacağı için sistem belleği bu yükü kaldıramayabilir.

6. Döngü içindeki elemanların işlenme sıralarının bir önemi yoksa tercih edilebilir. (önceki maddeleri de dikkate alarak)


Sonuç olarak, Parallel.ForEach, büyük döngülerde kodunuzu hızlandırabilecek önemli bir alternatif olabilir, ancak yanlış kullanıldığında kodunuzu yavaşlatabilir ve hatta sistemde kitlenmelere yol açabilir. Kodunuzdaki durumu değerlendirip bilinçli bir şekilde kullanıldığında ciddi performans artışları sağlayabilir. Bu nedenle, ihtiyacınıza ve projenizin gereksinimlerine göre foreach veya Parallel.ForEach'i tercih etmelisiniz.
 
Paylaşım İçin Teşekkürler.
 
Paylaşım için teşekkürler.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst