もっと詳しく
この記事では、C#プログラミング言語での並列Foreachループに焦点を当てます。 C#プログラミングでの並列という言葉は、スレッドタスクの概念に由来します。つまり、複数のタスクを同時に実行している場合、スレッドタスクライブラリを使用して、タスク並列ライブラリを呼び出して並列にすることができます。Foreachループが機能します。通常のシーケンシャルforおよびForeachループと比較して、より効率的で時間のかからないため、これらのタスクを超えます。 Parallel Foreachループは、タスクを分割し、複数のストリームで反復を実行して、最終目標に到達します。 Parallel Foreachは、プロセスが繰り返し入力を求められ、プロセスのペースを上げるために他の操作に相互依存している場合にのみ使用されます。

次に、C#プログラミング言語でのParallel Foreachループの理解を明確にし、理解を深めるために、いくつかの例を実行します。

例01:Ubuntu20.04でParallelForeachループを使用してリストに番号を追加する

この例では、並列Foreachループを使用してリストに番号を追加し、各ステップに同時に割り当てられたスレッドの数をマークするC#プログラムを作成します。 各ループの並列処理の監視と効率にアクセスするには、スレッドタスクやリンクなどのさまざまなライブラリを使用する必要があります。 この例は、Ubuntu20.04環境で実行します。g

上記のコードでは、範囲関数を使用して番号がリストに割り当てられた各ループの並列を使用してリストを生成しました。 次に、リストに値を割り当てるときに使用されるスレッドの数を監視するために、すべてのステップでスレッドIDも出力しました。 コマンドラインターミナルでこのプログラムファイルを実行すると、次の出力が得られます。

出力は、リストに5つの値が割り当てられ、このプロセス中に2つのスレッドが使用されたため、このタスクの実行に時間差が生じたことを示しています。 単純なシーケンシャルForeachループを使用できる場合、タスクは単一のスレッドで実行され、実行は並列Foreachループの実行時間よりも長くなります。 これは、手元のタスクのサイズによって異なりますが、並列foreachループは、タスクを複数のスレッドに分割し、「分割統治」アプローチで機能するため、タスクと処理のサイズが大きいほど便利です。 。

例02:Ubuntu20.04で並列Foreachループを使用してスレッド数を制御する

この例では、並列Foreachループが実行されるときのスレッド数の作成を制御します。 タスクスレッドライブラリを使用すると、ParallelOptionsクラスの並列操作を制御する「MaxDegreeOfParallelism」というラベルの付いたプロパティにアクセスできます。このプロパティに値を割り当てると、プログラム中に実行される並列操作の数が定義されます。 このプロパティは、引数を介して並列Foreachループに送信されます。 リストに番号を割り当て、このタスクを実行するためのスレッドの数を定義するC#プログラムを作成します。

このタスクの実行に使用されたスレッドの総数はわずか2であることがわかります。これは、「最大並列度」に値を割り当ててこの数を修正したためです。 大量のデータ処理の場合、最大並列度に割り当てられた値を変更できます。 これにより、処理能力をサブタスクまたは並列操作間で均等かつ効率的に分割できます。

例03:Ubuntu 20.04のC#プログラムでParallelForeachループを使用して文字列変数を使用してリストを印刷する

この例では、Ubuntu 20.04環境のC#プログラムで並列Foreachループを使用して、文字列変数を含むリストのアイテムを出力します。 最初にリストを初期化し、手動でリストに値を割り当ててから、並列foreachループを使用してそのすべての要素を出力として出力します。

上記のコードでは、大陸という名前のリストを作成し、各ループの並列を使用する前に、大陸の名前をリストに追加しました。 コードに並列Foreachループを使用するために、スレッドタスクライブラリを追加しました。 並列foreachメソッドは、リストと新しいオブジェクトをパラメーターとして受け取り、反復ごとに値を一時的に格納します。 コマンドラインターミナルでこのコードファイルを実行すると、前にリストに保存した大陸の名前のリストが表示されます。

例04:Ubuntu 20.04のC#で並列Foreachループを使用して従来のForeachループをシーケンシャルと比較する

この例では、両方のループで同様のタスクを実行することにより、従来のForeachループとそのシーケンシャルプロパティを並列Foreachループと比較します。 タスクへのアプローチが異なるため、両方のループの実行時間は異なります。 リストの内容を出力します。これは、操作の前に初期化され、シーケンシャルプロパティを持つ従来のForeachループと、各ループの並列を使用します。

上記のC#プログラムでは、通常のForeachループと並列のForeachループを使用して、両方のループでタスクの実行にかかる時間を計算しています。 C#プログラミング言語の「診断」ライブラリのストップウォッチクラスを使用します。 ストップウォッチクラスには、ストップウォッチを開始する「StartNew()」メソッドがあり、elapsed()関数を使用してストップウォッチを停止します。 これらの関数は両方とも、StopWatchクラスのオブジェクトを作成することによってアクセス可能になりました。

出力は、従来のForeachループがParallelForeachループよりもタスクの実行にかかる時間が短いことを示しています。 その理由は、タスクの実行はシングルスレッド操作に最適であり、このタスクに複数のスレッドを作成するには時間がかかるためですが、リストに数千のデータが含まれている場合、実行時間はその逆になります。そのシナリオでは、タスクのスレッド化が効率的で時間の節約になるためです。 したがって、Parallel Foreachループを使用する場合は、その操作に必要な処理能力のサイズを観察し、どちらがその操作に適したループになるかを検討する必要があります。

結論:

C#プログラミング言語での並列Foreachループについて説明しました。 この記事では、「並列」という名前の意味と、並列Foreachループと標準のForeachループの実際的な違いについて説明しました。 次に、Ubuntu20.04環境でParallelForeachループのいくつかの例を実装して、トピックをより明確にしました。 並列foreachループの使用は、そのスレッドメカニズムのためにどちらの方向にも進む可能性があるため、プログラミング中に監視する必要があると結論付けました。 タスクは分割されますが、小さなタスクの場合は時間がかかります。

The post C#Parallel Foreach appeared first on Gamingsym Japan.