Foreach loop ใน C # ทำงานบนเธรดเดียวและการประมวลผลเกิดขึ้นตามลำดับทีละรายการ ในขณะที่ Parallel.Foreach วนซ้ำใน C # ทำงานบนหลายเธรดและการประมวลผลเกิดขึ้นในลักษณะคู่ขนาน ซึ่งหมายความว่าจะวนซ้ำทุกรายการพร้อมกันโดยไม่ต้องรอให้รายการก่อนหน้าเสร็จสิ้น
การดำเนินการ Parallel.Foreach นั้นเร็วกว่า ForEach ปกติ ในการใช้ Parallel.ForEach loop เราจำเป็นต้องนำเข้าเนมสเปซ 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 ปกติ