C# 中的 Foreach 和 Parallel.Foreach 有什麼區別?


C# 中的 Foreach 迴圈在單執行緒上執行,處理按順序一個接一個進行。而 C# 中的 Parallel.Foreach 迴圈則在多執行緒上執行,並行地進行處理。這意味著它會一次性地遍歷所有項而無需等待之前的項完成。

Parallel.Foreach 的執行速度比普通 ForEach 要快。要使用 Parallel.ForEach 迴圈,我們需要匯入 System.Threading.Tasks 名稱空間。

示例

 線上演示

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
namespace DemoApplication{
   class Demo{
      static void Main(string[] args){
         var animals = new List<string>{
            "cat", "rat", "deer", "elephant", "lion", "tiger", "dog", "pig", "buffalo", "rabbit", "horse", "cheetah", "cow", "goat", "sheep", "donkey", "zebra", "wolf", "fox", "lepoard", "monkey", "kangaroo", "girafee", "hippo"
         };
         var stopWatch = Stopwatch.StartNew();
         foreach (string animal in animals){
            Console.WriteLine($"Fruit Name: {animal}, Thread Id={Thread.CurrentThread.ManagedThreadId}");
         }
         Console.WriteLine($"foreach loop execution time = {stopWatch.Elapsed.TotalSeconds} seconds");
         var stopWatch2 = Stopwatch.StartNew();
         Parallel.ForEach(animals, animal =>{
            Console.WriteLine($"Fruit Name: {animal}, Thread Id={Thread.CurrentThread.ManagedThreadId}");
         });
         Console.WriteLine($"Parallel foreach loop execution time = {stopWatch2.Elapsed.TotalSeconds} seconds");
         Console.ReadLine();
      }
   }
}

輸出

以上程式碼的輸出為

Fruit Name: cat, Thread Id= 1
Fruit Name: rat, Thread Id= 1
Fruit Name: deer, Thread Id= 1
Fruit Name: elephant, Thread Id= 1
Fruit Name: lion, Thread Id= 1
Fruit Name: tiger, Thread Id= 1
Fruit Name: dog, Thread Id= 1
Fruit Name: pig, Thread Id= 1
Fruit Name: buffalo, Thread Id= 1
Fruit Name: rabbit, Thread Id= 1
Fruit Name: horse, Thread Id= 1
Fruit Name: cheetah, Thread Id= 1
Fruit Name: cow, Thread Id= 1
Fruit Name: goat, Thread Id= 1
Fruit Name: sheep, Thread Id= 1
Fruit Name: donkey, Thread Id= 1
Fruit Name: zebra, Thread Id= 1
Fruit Name: wolf, Thread Id= 1
Fruit Name: fox, Thread Id= 1
Fruit Name: lepoard, Thread Id= 1
Fruit Name: monkey, Thread Id= 1
Fruit Name: kangaroo, Thread Id= 1
Fruit Name: girafee, Thread Id= 1
Fruit Name: hippo, Thread Id= 1
foreach loop execution time = 0.0129221 seconds
Fruit Name: cat, Thread Id= 1
Fruit Name: rat, Thread Id= 1
Fruit Name: deer, Thread Id= 1
Fruit Name: elephant, Thread Id= 1
Fruit Name: lion, Thread Id= 1
Fruit Name: tiger, Thread Id= 1
Fruit Name: pig, Thread Id= 1
Fruit Name: buffalo, Thread Id= 1
Fruit Name: dog, Thread Id= 3
Fruit Name: sheep, Thread Id= 3
Fruit Name: donkey, Thread Id= 3
Fruit Name: rabbit, Thread Id= 1
Fruit Name: goat, Thread Id= 5
Fruit Name: fox, Thread Id= 5
Fruit Name: lepoard, Thread Id= 5
Fruit Name: cow, Thread Id= 4
Fruit Name: hippo, Thread Id= 4
Fruit Name: kangaroo, Thread Id= 9
Fruit Name: girafee, Thread Id= 6
Fruit Name: monkey, Thread Id= 5
Fruit Name: horse, Thread Id= 1
Fruit Name: cheetah, Thread Id= 1
Fruit Name: zebra, Thread Id= 3
Fruit Name: wolf, Thread Id= 3
Parallel foreach loop execution time = 0.0092988 seconds

從以上結果中,我們可以看出,Parallel.Foreach 在不同的執行緒中執行,並且與普通 foreach 相比耗時更少。

更新於:04-8-2020

1K+ 瀏覽

開飛你的 職業生涯

透過完成課程獲得認證

立即開始
廣告