やりたいこと
以前の記事がこちらになります。
C# Parallel 入門
前回の方法では、for文の中の計算結果を足し合わせるということをしていたのですが、
もう少し複雑なことがしたくなりました。
1からNまで順番に数字を調べていって、それが目当ての数字だったら、
Listに登録することが目的です。
コード
-
- object obj = new object();
- Parallel.For<list<int64>>(1, endNum, () => new List<int64>(), (Int64 num, ParallelLoopState state, List<int64> partial) =>
- {
-
- if (num == XXX)
- {
- partial.Add(num);
- }
-
- return partial;
- },
- partial =>
- {
-
- foreach (var val in partial)
- {
- lock (obj) motometeruList.Add(val);
- }
- });
-
- </int64></int64></list<int64>
// 並列化
object obj = new object();
Parallel.For>(1, endNum, () => new List(), (Int64 num, ParallelLoopState state, List partial) =>
{
// もとめたい数字がきたらListに登録する
if (num == XXX)
{
partial.Add(num);
}
return partial;
},
partial =>
{
foreach (var val in partial)
{
lock (obj) motometeruList.Add(val);
}
});
コードの説明
結果
for文でループさせる回数や中身の計算にもよると思いますが、
自分がやりたかった計算では、「40000000」までループさせる計算で、
Parallel使う前は1500秒だったものが、Parallelに変更すると、
300秒ぐらいで終わるようになりました。