Hier sollte aber beachtet werden, dass ein .Net Compiler niemals zuviel optimieren sollte!
Das würde dem JIT die Möglichkeit rauben den Code entsprechend der bestehenden Situation und Plattform zu optimieren.
In dem Beispiel wird entgegen aller Erwartungen Test1 schneller oder mindestens genauso schnell wie Test2 sein.
Code:
public class Class1
{
public Class1()
{
string[] strings = new string[] {"a", "b", "c", "d"};
Test1(strings);
Test2(strings);
}
void Test1(string[] stringArray)
{
for (int i = stringArray.GetLength(0); i >= 0; i--)
{
...
}
}
void Test2(string[] stringArray)
{
int arrayLength = stringArray.GetLength(0);
for (int i = arrayLength; i >= 0; i--)
{
...
}
}
}
Neben code prediction und anderen Spielereien gibt es bestimmte Typen, auf die der JIT ganz speziell reagiert.
Array gehört dazu. (Aber auch IList, IEnumerable, Attribute,...)