C#でParallel.ForEachを制限するにはどうすればよいですか?
Parallel Foreach
Parallel.ForEachループはC#で複数のスレッドで実行され、処理は並列に行われます。 Parallel.ForEachループはC#の基本機能ではなく、C#4.0以降で使用できます。Parallel.ForEachループを使用するには、usingディレクティブでSystem.Threading.Tasks名前空間をインポートする必要があります。
Foreach
C#のForeachループは単一のスレッドで実行され、処理は1つずつ順番に行われます。 ForeachループはC#の基本機能であり、C#1.0から利用できます。ほとんどの場合、その実行はParallel.Foreachよりも遅くなります。
例1
static void Main(string[] args){
List<string> alphabets = new List<string>();
alphabets.Add("A");
alphabets.Add("B");
alphabets.Add("C");
alphabets.Add("D");
alphabets.Add("E");
alphabets.Add("F");
alphabets.Add("G");
alphabets.Add("H");
alphabets.Add("I");
alphabets.Add("J");
alphabets.Add("K");
alphabets.Add("L");
alphabets.Add("M");
alphabets.Add("N");
alphabets.Add("O");
alphabets.Add("P");
alphabets.Add("Q");
alphabets.Add("R");
alphabets.Add("S");
alphabets.Add("T");
alphabets.Add("U");
alphabets.Add("V");
alphabets.Add("W");
alphabets.Add("X");
alphabets.Add("Y");
alphabets.Add("Z");
Console.WriteLine("Printing list using foreach loop\n");
var stopWatch = Stopwatch.StartNew();
foreach (string alphabet in alphabets){
Console.WriteLine("alphabet Name: {0}, Thread Id= {1}", alphabet, 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(alphabets, alphabet =>
{
Console.WriteLine("alphabet Name: {0}, Thread Id= {1}", alphabet, Thread.CurrentThread.ManagedThreadId);
}
);
Console.WriteLine("Parallel.ForEach() execution time = {0} seconds", stopWatch.Elapsed.TotalSeconds);
Console.Read();
Console.ReadLine();
} 出力
foreachループを使用したリストの印刷
alphabet Name: A, Thread Id= 1 alphabet Name: B, Thread Id= 1 alphabet Name: C, Thread Id= 1 alphabet Name: D, Thread Id= 1 alphabet Name: E, Thread Id= 1 alphabet Name: F, Thread Id= 1 alphabet Name: G, Thread Id= 1 alphabet Name: H, Thread Id= 1 alphabet Name: I, Thread Id= 1 alphabet Name: J, Thread Id= 1 alphabet Name: K, Thread Id= 1 alphabet Name: L, Thread Id= 1 alphabet Name: M, Thread Id= 1 alphabet Name: N, Thread Id= 1 alphabet Name: O, Thread Id= 1 alphabet Name: P, Thread Id= 1 alphabet Name: Q, Thread Id= 1 alphabet Name: R, Thread Id= 1 alphabet Name: S, Thread Id= 1 alphabet Name: T, Thread Id= 1 alphabet Name: U, Thread Id= 1 alphabet Name: V, Thread Id= 1 alphabet Name: W, Thread Id= 1 alphabet Name: X, Thread Id= 1 alphabet Name: Y, Thread Id= 1 alphabet Name: Z, Thread Id= 1 foreach loop execution time = 0.0223421 seconds
Parallel.ForEachを使用したリストの印刷
alphabet Name: A, Thread Id= 1 alphabet Name: G, Thread Id= 4 alphabet Name: H, Thread Id= 4 alphabet Name: I, Thread Id= 4 alphabet Name: J, Thread Id= 4 alphabet Name: K, Thread Id= 4 alphabet Name: L, Thread Id= 4 alphabet Name: N, Thread Id= 4 alphabet Name: O, Thread Id= 4 alphabet Name: P, Thread Id= 4 alphabet Name: Q, Thread Id= 4 alphabet Name: Y, Thread Id= 6 alphabet Name: Z, Thread Id= 6 alphabet Name: D, Thread Id= 6 alphabet Name: E, Thread Id= 6 alphabet Name: F, Thread Id= 6 alphabet Name: T, Thread Id= 6 alphabet Name: U, Thread Id= 6 alphabet Name: V, Thread Id= 6 alphabet Name: R, Thread Id= 4 alphabet Name: M, Thread Id= 5 alphabet Name: S, Thread Id= 7 alphabet Name: B, Thread Id= 1 alphabet Name: C, Thread Id= 1 alphabet Name: W, Thread Id= 6 alphabet Name: X, Thread Id= 6 Parallel.ForEach() execution time = 0.0559777 seconds
例2
Paralleleismをparallel.foreach
で制限しますstatic class Program{
static void Main(string[] args){
List<string> alphabets = new List<string>();
alphabets.Add("A");
alphabets.Add("B");
alphabets.Add("C");
alphabets.Add("D");
alphabets.Add("E");
alphabets.Add("F");
alphabets.Add("G");
alphabets.Add("H");
alphabets.Add("I");
alphabets.Add("J");
alphabets.Add("K");
alphabets.Add("L");
alphabets.Add("M");
alphabets.Add("N");
alphabets.Add("O");
alphabets.Add("P");
alphabets.Add("Q");
alphabets.Add("R");
alphabets.Add("S");
alphabets.Add("T");
alphabets.Add("U");
alphabets.Add("V");
alphabets.Add("W");
alphabets.Add("X");
alphabets.Add("Y");
alphabets.Add("Z");
Parallel.ForEach(
alphabets,
new ParallelOptions { MaxDegreeOfParallelism = 2 },
alphabet => { Console.WriteLine("alphabet Name: {0}, Thread Id= {1}", alphabet, Thread.CurrentThread.ManagedThreadId); }
);
}
} 出力
alphabet Name: N, Thread Id= 4 alphabet Name: O, Thread Id= 4 alphabet Name: P, Thread Id= 4 alphabet Name: A, Thread Id= 1 alphabet Name: B, Thread Id= 1 alphabet Name: C, Thread Id= 1 alphabet Name: Q, Thread Id= 4 alphabet Name: R, Thread Id= 4 alphabet Name: S, Thread Id= 4 alphabet Name: T, Thread Id= 4 alphabet Name: U, Thread Id= 4 alphabet Name: V, Thread Id= 4 alphabet Name: W, Thread Id= 4 alphabet Name: X, Thread Id= 4 alphabet Name: Y, Thread Id= 4 alphabet Name: Z, Thread Id= 4 alphabet Name: H, Thread Id= 4 alphabet Name: I, Thread Id= 4 alphabet Name: J, Thread Id= 4 alphabet Name: K, Thread Id= 4 alphabet Name: D, Thread Id= 1 alphabet Name: L, Thread Id= 4 alphabet Name: E, Thread Id= 1 alphabet Name: F, Thread Id= 1 alphabet Name: G, Thread Id= 1 alphabet Name: M, Thread Id= 4
-
データをバックアップするにはどうすればよいですか?
今日の IT の世界では、包括的なバックアップ戦略を持つことが不可欠です。データが失われる方法は非常に多いため、不快な状況に直面しないためには、データを正常にバックアップする方法を理解することが重要です。では、どのようにデータをバックアップできますか? データ損失 サイバー攻撃、不正な従業員、自然災害、メディアの損傷、および人的エラーは、データを失う可能性があるいくつかの方法にすぎません.データを失うことは、個人にとっては迷惑で悲痛なことかもしれませんが、組織にとっては、その影響は取り返しのつかないものになる可能性があります. Consoltech のこれらの恐ろしい数字のいくつかを以下で見
-
ウイルス対策で PC を高速化する方法
多くのユーザーは、アンチウイルスが PC の速度を低下させる可能性があると誤解しています。はい、ウイルス対策によって PC の速度が低下するケースはほとんどありません。これについては、このブログで後ほど説明します。アンチウイルスが PC の速度を低下させたとしても (少し)、PC を包括的にスキャンして脅威を検出し、脅威を未然に防ぐことができます。しかし、全体として、ウイルス対策は PC のパフォーマンスを向上させるのに役立ちます。 優れた有料および無料のウイルス対策がいくつかあります そこに。このブログでは、入手可能な最高のアンチウイルスの 1 つである Systweak Antiviru