SORU
3 EYLÜL 2012, PAZARTESİ


Bir Paralel kullanma zamanı.Düzenli bir foreach döngüsü yerine ForEach?

Parallel.ForEach hakkında kafam karıştı biraz benim.
Parallel.ForEach nedir ve tam olarak ne yapar?
Herhangi bir MSDN bağlantı başvurusu yapma lütfen.

Burada basit bir örnek :

string[] lines = File.ReadAllLines(txtProxyListPath.Text);
List<string> list_lines = new List<string>(lines);

foreach (string line in list_lines)
{
    //My Stuff
}

Nasıl Parallel.ForEach Bu örnek, yeniden yapabilir miyim?

CEVAP
5 Temmuz 2013, Cuma


Döngü dosyalarda grup için:

  • Yineleme yerine sırayla tek tek alır
  • foreach döngü tek bir iş Parçacığı çalıştırılır.
  • foreach döngü her çerçeve içinde tanımlanır .NET
  • Yürütme yavaştır

Paralel.Dosyalarda grup için:

  • Yürütme paralel bir şekilde gerçekleşir.
  • Paralel.Dosyalarda grup için birden çok iş Parçacığı kullanır.
  • Paralel.Dosyalarda grup tanımlanır .Net çerçeveler 4.0 ve üstü.
  • Yürütme faster3

Aşağıdaki örnek açıkça geleneksel foreach döngü arasındaki farkı gösterir

Paralel.() ForEach Örnek.

 using System;
    using System.Diagnostics;
    using System.Threading;
    using System.Threading.Tasks;
    namespace ParallelForEachExample
    {
        class Program
        {
            static void Main()
            {
                string[] colors = {
                                      "1. Red",
                                      "2. Green",
                                      "3. Blue",
                                      "4. Yellow",
                                      "5. White",
                                      "6. Black",
                                      "7. Violet",
                                      "8. Brown",
                                      "9. Orange",
                                      "10. Pink"
                                  };
                Console.WriteLine("Traditional foreach loop\n");
                //start the stopwatch for "for" loop
                var sw = Stopwatch.StartNew();
                foreach (string color in colors)
                {
                    Console.WriteLine("{0}, Thread Id= {1}", color, Thread.CurrentThread.ManagedThreadId);
                    Thread.Sleep(10);
                }
                Console.WriteLine("foreach loop execution time = {0} seconds\n", sw.Elapsed.TotalSeconds);
                Console.WriteLine("Using Parallel.ForEach");
                //start the stopwatch for "Parallel.ForEach"
                 sw = Stopwatch.StartNew();
                Parallel.ForEach(colors, color =>
                {
                    Console.WriteLine("{0}, Thread Id= {1}", color, Thread.CurrentThread.ManagedThreadId);
                    Thread.Sleep(10);
                }
                );
                Console.WriteLine("Parallel.ForEach() execution time = {0} seconds", sw.Elapsed.TotalSeconds);
                Console.Read();
            }
        }
    }

Çıktı

Traditional foreach loop
1. Red, Thread Id= 10
2. Green, Thread Id= 10
3. Blue, Thread Id= 10
4. Yellow, Thread Id= 10
5. White, Thread Id= 10
6. Black, Thread Id= 10
7. Violet, Thread Id= 10
8. Brown, Thread Id= 10
9. Orange, Thread Id= 10
10. Pink, Thread Id= 10
foreach loop execution time = 0.1054376 seconds

Paralel Kullanarak.Örnek dosyalarda grup

1. Red, Thread Id= 10
3. Blue, Thread Id= 11
4. Yellow, Thread Id= 11
2. Green, Thread Id= 10
5. White, Thread Id= 12
7. Violet, Thread Id= 14
9. Orange, Thread Id= 13
6. Black, Thread Id= 11
8. Brown, Thread Id= 10
10. Pink, Thread Id= 12
Parallel.ForEach() execution time = 0.055976 seconds

...Teşekkürler.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • NCIX Tech Tips

    NCIX Tech Ti

    2 Ocak 2007
  • sghaff1

    sghaff1

    23 Mart 2009
  • VitalyzdTv

    VitalyzdTv

    7 AĞUSTOS 2011