Efficiency of iteration over arrays?

Which one of these three loops is the most efficient? How can I prove the answer?

I've listed the source code below. The three loops are:

  1. ::: {.MsoNormal} Foreach over an int array :::

  2. ::: {.MsoNormal} Simple for over an int array :::

  3. ::: {.MsoNormal} For over an int array, hoisting out the length value :::

...

The third option is to be avoided. The JIT looks for the pattern in version #2, and knows how to optimize it. If you pull the value out into a temporary, it may not optimize it. Of course, you know that because you've been measuring your important scenarios...

via [Eric Gunnerson's C# Compendium]

\<

p class=ngrelatedlinks align=left> Hoisting the Length value is ill-advised? Surprising; I'll have to change my habits.