C# での並列処理の制限
大規模なデータ セットを処理する場合、多くの場合、パフォーマンスを向上させるために同時操作を実行する必要があります。ただし、システムに過大な負荷がかかるのを避けるために、並列タスクの数を制御することが重要です。この記事では、C# で並列タスクの最大数を制限し、順序付けられた処理を確保する方法について説明します。
最大並列処理の制限
同時に処理されるメッセージの最大数を制限するには、次のようにします。 Parallel.ForEach メソッドと MaxDegreeOfParallelism オプションを組み合わせて利用できます。次に例を示します。
Parallel.ForEach(messages, new ParallelOptions { MaxDegreeOfParallelism = 10}, msg => { // Logic Process(msg); });
この例では、MaxDegreeOfParallelism が 10 に設定されています。これは、コレクション内のメッセージの数に関係なく、最大 10 個のメッセージのみが同時に処理されることを意味します。
順序付けされた処理
タスクの実行順序は保証されませんデフォルトで並列処理を使用する場合。ただし、メッセージがコレクションと同じ順序で処理されるようにする必要がある場合は、カスタム アプローチを実装できます。
解決策の 1 つは、メッセージごとに個別のタスクを作成し、その実行シーケンスを手動で管理することです。簡略化した例を次に示します。
// List of message tasks var tasks = new List<Task>(); // Add tasks to the list foreach (var msg in messages) { tasks.Add(Task.Factory.StartNew(() => { Process(msg); })); } // Execute tasks sequentially foreach (var task in tasks) { task.Wait(); }
このアプローチにより、タスクが入力コレクションと正確な順序で実行されることが保証されます。
結論
Parallel.ForEach と MaxDegreeOfParallelism を活用すると、C# で並列タスクの最大数を制御できます。さらに、必要に応じてカスタム ソリューションを実装して、順序付けられた処理を確保できます。これらの手法は、大規模なデータ セットを処理する際のパフォーマンスの最適化とリソースの過負荷の防止に役立ちます。
以上がC# で大規模なデータセットを処理するときに並列処理を制御し、順序付けられた処理を確保するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。