0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Parallelクラスでお手軽な並列処理

Last updated at Posted at 2019-12-21

会社の人にParallelクラスの存在を教えてもらったのでメモ。
.NET Framework 4で追加されたかなり前から存在する機能なのでありふれた内容です。

概要

Parallelクラスを利用することでループ内を手軽に並列化できる。

メリット

  • 通常のfor, foreachと書き方が殆ど変わらない点が非常にお手軽。
  • Thread, Task, await, asyncを使わずに並列処理を実現できる。

注意点

当然ではあるが並列処理なので同じファイルへのアクセスなどは気をつける必要がある。Lockをかけるとか。

通常のforeach

List<int> list = new List<int>()
{
    1, 2, 3, 4, 5, 6, 7, 8, 9
};

foreach (int value in list)
{
    Console.Write(value);
}
実行結果
123456789

逐次処理なので1~9まで順番にコンソール出力されます。

Parallel.ForEachで並列化

List<int> list = new List<int>()
{
    1, 2, 3, 4, 5, 6, 7, 8, 9
};

// 並列処理オプションの設定
ParallelOptions parallelOptions = new ParallelOptions();
parallelOptions.MaxDegreeOfParallelism = 4;

// 並列処理実行
Parallel.ForEach(list, parallelOptions, (value) =>
{
    Console.Write(value);
});
実行結果
156894723

並列処理なので実行毎に結果が変わります。
順番を気にする必要のない処理であれば非常に手軽に高速化できます。
「MaxDegreeOfParallelism」の設定は実行環境のCPU性能や負荷状況による。
今のコンシューマ向けCPUなら4で良いと思う。

あとがき

お手軽すぎる。C#好き。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?