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

  • MisterBrightside

    MisterBright

    24 Mart 2006
  • Tutorials Junction

    Tutorials Ju

    1 Ocak 2014
  • Vicious Computers

    Vicious Comp

    14 EKİM 2006