foreach文を検証する

先日、学校で「JavaのListの列挙で、for文でgetするのとIteratorと拡張for文でどれが速いかを調べる」という課題が出ました。
結果は、ArrayListだとgetした方が速いとかまぁ、そんな感じだったのですが。


ところで、僕のメイン言語はC#です。ということで、C#のListクラスで要素列挙の速さを比べてみました。
実験は、Listに1000万要素を列挙する速さを検証してみました。試行回数は1000回。
スペックはCore 2 Duo 2.16GHz。Debugでコンパイルしています。

結果

  • Foreach
    • 106.9910 : 1.0634
  • Foreach Method
    • 74.7642 : 0.9882
  • For
    • 61.9265 : 1.5508


左の数値が平均の時間(msec)、右の数値が標準偏差です。
Foreachがforeach文で列挙した時間、Foreach MethodがListクラスのForEachメソッドを呼んで列挙した時間、Forがforループでgetした時間です。


For文での列挙は速いですが、書くときは面倒。foreach構文よりもForEachメソッドの方が速いらしいです。delegateの呼び出しのオーバーヘッドって、あんまりないんですね。