Binoj Antony Binoj Antony - 1 month ago 10
C# Question

In .NET, which loop runs faster, 'for' or 'foreach'?

In C#/VB.NET/.NET, which loop runs faster,

for
or
foreach
?

Ever since I read that a
for
loop works faster than a
foreach
loop a long time ago I assumed it stood true for all collections, generic collections, all arrays, etc.

I scoured Google and found a few articles, but most of them are inconclusive (read comments on the articles) and open ended.

What would be ideal is to have each scenario listed and the best solution for the same.

For example (just an example of how it should be):


  1. for iterating an array of 1000+
    strings -
    for
    is better than
    foreach

  2. for iterating over
    IList
    (non generic) strings -
    foreach
    is better
    than
    for



A few references found on the web for the same:


  1. Original grand old article by Emmanuel Schanzer

  2. CodeProject FOREACH Vs. FOR

  3. Blog - To
    foreach
    or not to
    foreach
    , that is the question

  4. ASP.NET forum - NET 1.1 C#
    for
    vs
    foreach





[Edit]

Apart from the readability aspect of it, I am really interested in facts and figures. There are applications where the last mile of performance optimization squeezed do matter.

Answer

Patrick Smacchia blogged about this last month, with the following conclusions:

  • for loops on List are a bit more than 2 times cheaper than foreach loops on List.
  • Looping on array is around 2 times cheaper than looping on List.
  • As a consequence, looping on array using for is 5 times cheaper than looping on List using foreach (which I believe, is what we all do).