C#におけるforeach文とfor文による添え字アクセスのパフォーマンス検証

C#においてforeach文とfor文で添え字アクセスする方法のどちらを用いたほうがパフォーマンスが上がるのかについて気になっていました。

普段良く使う配列(Arrayクラス)とListクラスについて、foreach文とfor文によるシーケンシャルアクセスの速度を検証してみました。

今回用いたプログラムは以下の通りです。

実行結果は以下のようになりました。

■Debug版

■Release版

上記より、配列ではforeach文を用いたほうが速いようです。
Listクラスではfor文による添え字アクセスのほうが速いようです。

線形リストへの要素アクセスは通常でo(n)の処理コストがかかるため、ちょっと意外でした。
恐らく、シーケンシャルアクセスの場合は内部的に直近の要素への参照を保持しているなどで対策を施しているのかもしれません。
foreach文の場合はcollection.MoveNext()メソッドを呼び出してからcollection.Currentを呼び出す必要があるため、このワンクッションで時間がかかっている・・・のかもしれません。

foreachとfor文による添え字アクセスはどちらもそれほどパフォーマンスが劇的に低下することは無いので、状況に応じて使いやすいほうを使うので問題ないと思います。

LEAVE A REPLY

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください