ForEachメソッドというものがあることを、この記事を読んで思い出しました。
連載! とことん C# - 第 24 回 ラムダ式と "外の世界" とのやりとり
ここではラムダ式での注意点について書いており、ForEachメソッドのことばかりを
書いているわけではないです。ただ、
foreach 文よりも、コレクションのメンバー (メソッド) である ForEach メソッドの方が高速である
という記述が気になりました。普段から、コレクション全体の処理でforeach 文でのループを
よく使うので、ちょっと考え直さないといけないかもしれません。
また、このForEachメソッドとは別のものもあります。
方法: スレッド ローカル変数を持つ Parallel.ForEach ループを記述するスレッド ローカル変数を持つ ForEach メソッドを記述する方法を次の例に示します。ForEach ループが実行されると、そのソース コレクションが複数のパーティションに分割されます。各パーティションには、"スレッド ローカル" 変数が個別にコピーされます ("スレッド ローカル" という用語は少し不正確です。1 つのスレッド上で 2 つのパーティションが実行されることがあるからです)。
この例のコードおよびパラメーターは、対応する For メソッドによく似ています。詳細については、「方法: スレッド ローカル変数を持つ Parallel.For ループを記述する」を参照してください。
総当たり処理でも並列化できるものは、こういう工夫が必要ですね。
特にマルチコアのCPUが普通の世の中ですと、特に
カテゴリー: Microsoft