C#의Foreachloop는 단일 스레드에서 실행되며 처리는 하나씩 순차적으로 발생합니다.Foreachloop는 C#의 기본 기능이며 C# 1.0부터 사용할 수 있습니다.실행은대부분의 경우 Parallel.Foreach보다 느립니다.
Parallel.ForEach
C#의 Parallel.ForEach loop는 멀티 스레드에서 실행되며 처리는 병렬 방식으로 발생합니.Parallel.ForEach loop 는 C#의 기본 기능이 아니며 C# 4.0 이상에서 사용할 수 있습니다.C# 4.0 이전에는 사용할 수 없습니다.대부분의 경우 foreach보다 빠릅니다.Parallel.ForEach 루프를 사용하려면using 지시문에서System.Threading.Tasks네임스페이스를 가져와야합니다.
두 가지 예를 제시하고 있습니다.
첫 번째 예에서 foreach loop 는 Parallel.foreach loop 보다 빠르며, 두 번째 예에서와 같이 전통적인 foreach 루프는 Parallel.foreach에 비해 매우 느립니다.
예 1:Parallel.ForEach 루프는 기존 Foreach 루프보다 느립니다.
List<string> fruits = new List<string>();
fruits.Add("Apple");
fruits.Add("Banana");
fruits.Add("Bilberry");
fruits.Add("Blackberry");
fruits.Add("Blackcurrant");
fruits.Add("Blueberry");
fruits.Add("Cherry");
fruits.Add("Coconut");
fruits.Add("Cranberry");
fruits.Add("Date");
fruits.Add("Fig");
fruits.Add("Grape");
fruits.Add("Guava");
fruits.Add("Jack-fruit");
fruits.Add("Kiwi fruit");
fruits.Add("Lemon");
fruits.Add("Lime");
fruits.Add("Lychee");
fruits.Add("Mango");
fruits.Add("Melon");
fruits.Add("Olive");
fruits.Add("Orange");
fruits.Add("Papaya");
fruits.Add("Plum");
fruits.Add("Pineapple");
fruits.Add("Pomegranate");
Console.WriteLine("Printing list using foreach loop\n");
var stopWatch = Stopwatch.StartNew();
foreach (string fruit in fruits)
{
Console.WriteLine("Fruit Name: {0}, Thread Id= {1}", fruit, Thread.CurrentThread.ManagedThreadId);
}
Console.WriteLine("foreach loop execution time = {0} seconds\n", stopWatch.Elapsed.TotalSeconds);
Console.WriteLine("Printing list using Parallel.ForEach");
stopWatch = Stopwatch.StartNew();
Parallel.ForEach(fruits, fruit =>
{
Console.WriteLine("Fruit Name: {0}, Thread Id= {1}", fruit, Thread.CurrentThread.ManagedThreadId);
}
);
Console.WriteLine("Parallel.ForEach() execution time = {0} seconds", stopWatch.Elapsed.TotalSeconds);
Console.Read();
댓글