Ja, die erste Version ist viel langsamer. Schließlich habe ich nehme an, Sie mit Typen wie dies zu tun hat:
public class SlowCountProvider
{
public int Count
{
get
{
Thread.Sleep(1000);
return 10;
}
}
}
public class KeyValuesWithSlowCountProvider
{
public SlowCountProvider KeyValues
{
get { return new SlowCountProvider(); }
}
}
hier Ihre erste Schleife ~ 10 Sekunden in Anspruch nehmen wird, während Ihre zweite Schleife ~ 1 Sekunde dauern.
Natürlich könnten Sie argumentieren, dass die Annahme, dass Sie diesen Code verwenden, ungerechtfertigt ist - aber mein Punkt ist, dass die richtige Antwort von den beteiligten Typen abhängt, und die Frage nicht angibt, was diese Typen sind.
Nun, wenn Sie tatsächlich mit einer Art zu tun, wo KeyValues
und Count
Zugriff ist billig (was sehr wahrscheinlich ist) Ich würde nicht erwarten, dass viel Unterschied.Wohlgemerkt, ich würde fast immer lieber foreach
verwenden, wo möglich:
foreach (var pair in dwhSessionDto.KeyValues)
{
// Use pair here
}
diese Weise können Sie nie die Zählung benötigen. Aber dann hast du auch nicht gesagt, was du in der Schleife machen willst. (Tipp: Um mehr nützliche Antworten zu erhalten, provide more information.)
Sieht wie ein perfekter Mikro-Benchmark-Kandidat aus. – Oded
Sie haben nicht angegeben, um welche Typen es sich handelt oder was Sie in der Schleife tun. –
@ Jon Skeet: Vielleicht kann das Teil der Antwort sein. –