C#でParallelの処理速度比較(for, foreach, AsParallel(), AsParallel().ForAll(), Parallel.ForEach())
- 処理内容
- for : 2.1843秒
- foreach : 2.1337秒
- AsParallel() : 2.0763秒
- AsParallel().ForAll() : 0.4865秒
- Parallel.ForEach() : 0.3333秒
- 全コード
C#でParallel処理、ループ文を行うと思います。
その時の処理速度気になりますよね。
実際にやってみた結果は下になります。
処理内容
20回重たい処理を実行
for : 2.1843秒
for (int i = 0; i < _num.Count(); i++) { Processing(i); }
foreach : 2.1337秒
foreach (var i in _num) { Processing(i); }
AsParallel() : 2.0763秒
foreach (var i in _num.AsParallel()) { Processing(i); }
AsParallel().ForAll() : 0.4865秒
_num.AsParallel().ForAll(i => { Processing(i); });
Parallel.ForEach() : 0.3333秒
Parallel.ForEach(_num, i => { Processing(i); });
全コード
public static class ParallelSpeed { private static IEnumerable<int> _num = Enumerable.Range(0, 20); private static Stopwatch _sw; public static void Check() { _sw = Stopwatch.StartNew(); //for for (int i = 0; i < _num.Count(); i++) { Processing(i); } Console.WriteLine("for : " + _sw.Elapsed); _sw = Stopwatch.StartNew(); //foreach foreach (var i in _num) { Processing(i); } Console.WriteLine("foreach : "+_sw.Elapsed); _sw = Stopwatch.StartNew(); //AsParallel() foreach (var i in _num.AsParallel()) { Processing(i); } Console.WriteLine("AsParallel() : " + _sw.Elapsed); _sw = Stopwatch.StartNew(); //AsParallel.ForAll() _num.AsParallel().ForAll(i => { Processing(i); }); Console.WriteLine("AsParallel().ForAll() : " + _sw.Elapsed); _sw = Stopwatch.StartNew(); //Parallel.ForEach() Parallel.ForEach(_num, i => { Processing(i); }); Console.WriteLine("Parallel.ForEach() : " + _sw.Elapsed); } //重たい処理 private static void Processing(int i) { Thread.Sleep(100); } }