1. ホーム
  2. c#

[解決済み] .NETでは、'for'と'foreach'のどちらのループが速く実行されますか?

2022-03-24 10:56:41

質問

C#/VB.NET/.NETでは、どちらのループが速く動作するのでしょうか。 for または foreach ?

を読んで以来、私は for ループの方が foreach をループさせます。 とうの昔に すべてのコレクション、汎用コレクション、すべての配列などに当てはまると思っていました。

Googleで調べると、いくつかの記事が見つかりましたが、そのほとんどは結論が出ず(記事のコメントを読む)、オープンエンドになっています。

理想的なのは、それぞれのシナリオをリストアップして、それに対する最適な解決策を提示することです。

例えば(あくまで一例ですが)。

  1. 1000以上の配列の反復処理に 文字列 for よりも優れています。 foreach
  2. に対する反復処理に IList (非汎用)文字列 foreach がよいでしょう。 よりも for

同じくWebで見つけた参考文献をいくつか紹介します。

  1. エマニュエル・シャンツァーによるオリジナルの大昔の記事
  2. CodeProjectのFOREACHとの比較 FOR
  3. ブログ-宛先 foreach にするか、しないか foreach それが問題だ
  4. ASP.NETフォーラム - NET 1.1 C# forforeach

[編集]をクリックします。

読みやすさの面は別として、事実や数字にはとても興味があります。性能最適化の最後の1マイルが重要になるようなアプリケーションもあります。

どのように解決するのか?

パトリック・スマッキア ブログで紹介されました 先月、次のような結論に達しました。

  • Listのforループはforeachの2倍強の安さです。 ループを使用します。
  • 配列のループは、Listのループより2倍程度安くなります。
  • 結果として、forを使った配列のループは、5倍安くなります。 foreachでListをループさせるより (これは誰もがやっていることだと思いますが)。