会社の人にParallelクラスの存在を教えてもらったので自分用メモ。
.NET Framework 4で追加されたかなり前から存在する機能なのでありふれた内容です。
概要
Parallelクラスを利用することでループ内を手軽に並列化できる。
メリット
- 通常のfor, foreachと書き方が殆ど変わらない点が非常にお手軽。
- Thread, Task, await, asyncを使わずに並列処理を実現できる。
注意点
当然ではあるが並列処理なので同じファイルへのアクセスなどは気をつける必要がある。Lockをかけるとか。
通常のforeach
List<int>list=newList<int>(){1,2,3,4,5,6,7,8,9};foreach(intvalueinlist){Console.Write(value);}出力結果
123456789
逐次処理なので1~9まで順番にコンソール出力されます。
Parallel.ForEachで並列化
List<int>list=newList<int>(){1,2,3,4,5,6,7,8,9};// 並列処理オプションの設定ParallelOptionsparallelOptions=newParallelOptions();parallelOptions.MaxDegreeOfParallelism=4;// 並列処理実行Parallel.ForEach(list,parallelOptions,(value)=>{Console.Write(value);});実行結果
156894723
並列処理なので実行毎に結果が変わります。
順番を気にする必要のない処理であれば非常に手軽に高速化できます。
「MaxDegreeOfParallelism」の設定は実行環境によると思うが3~4が良いという意見をよく見る。
まとめ
お手軽すぎる。C#好き。