Hier Beispielcode ist Sie zu machen laufen könnte ein solcher Test:
var f = 10000000;
var p = new int[f];
for(int i = 0; i < f; ++i)
{
p[i] = i % 2;
}
var time = DateTime.Now;
p.Sum();
Console.WriteLine(DateTime.Now - time);
int x = 0;
time = DateTime.Now;
foreach(var item in p){
x += item;
}
Console.WriteLine(DateTime.Now - time);
x = 0;
time = DateTime.Now;
for(int i = 0, j = f; i < j; ++i){
x += p[i];
}
Console.WriteLine(DateTime.Now - time);
Das gleiche Beispiel fo r komplexes Objekt ist:
void Main()
{
var f = 10000000;
var p = new Test[f];
for(int i = 0; i < f; ++i)
{
p[i] = new Test();
p[i].Property = i % 2;
}
var time = DateTime.Now;
p.Sum(k => k.Property);
Console.WriteLine(DateTime.Now - time);
int x = 0;
time = DateTime.Now;
foreach(var item in p){
x += item.Property;
}
Console.WriteLine(DateTime.Now - time);
x = 0;
time = DateTime.Now;
for(int i = 0, j = f; i < j; ++i){
x += p[i].Property;
}
Console.WriteLine(DateTime.Now - time);
}
class Test
{
public int Property { get; set; }
}
Meine Ergebnisse mit Compiler-Optimierungen ausgeschaltet sind:
00:00:00.0570370 : Sum()
00:00:00.0250180 : Foreach()
00:00:00.0430272 : For(...)
und für die zweiten Test sind:
00:00:00.1450955 : Sum()
00:00:00.0650430 : Foreach()
00:00:00.0690510 : For()
es wie LINQ aussieht, ist im Allgemeinen langsamer als foreach (...) aber was für mich seltsam ist, ist, dass foreach (...) schneller zu sein scheint als for loop.
Ist dies schneller als foreach aus Interesse? – Coops
Ich bin auch an @ CodeBlend's Frage interessiert. Ist diese Berechnung schneller als eine for-Schleife? – rex
Stellen Sie sicher, dass Sie eine using-Anweisung für System.Linq verwenden. – ADH