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の呼び出しのオーバーヘッドって、あんまりないんですね。