Podczas pracy nad projektem natrafiłem na poniższy fragment kodu, który podniósł flagę wydajności.pętla foreach Różnica wydajności listy
foreach (var sample in List.Where(x => !x.Value.Equals("Not Reviewed")))
{
//do other work here
count++;
}
postanowiłem uruchomić kilka szybkich testów porównujących pierwotną pętli do następnego pętli:
foreach (var sample in List)
{
if (!sample.Value.Equals("Not Reviewed"))
{
//do other work here
count++;
}
}
i odrzucił tę pętlę w zbyt zobaczyć, co się dzieje:
var tempList = List.Where(x => !x.Value.Equals("Not Reviewed"));
foreach (var sample in tempList)
{
//do other work here
count++;
}
Zapełniłem także oryginalną listę na 3 różne sposoby: 50-50 (czyli 50% wartości, w których "Nie znaleziono", a pozostałe pozostałe), 10-90 i 90-10. To są moje wyniki, pierwsza i ostatnia pętla są w większości takie same, ale druga jest znacznie szybsza, szczególnie w przypadku 10-90. Dlaczego dokładnie? Zawsze uważałem, że Lambda
ma dobrą wydajność.
EDIT
count++
w rzeczywistości nie jest to, co wewnątrz pętli, po prostu dodać, że tutaj w celach demonstracyjnych, chyba powinien Użyłem „// zrób coś tutaj”
EDIT 2
Wyniki systemem każdy jeden tysiąc razy:
Byłoby interesujące zobaczyć, jak 'List.Where (x =>! X.Value.Equals (" Nie recenzja ")). Count()' wykonuje w porównaniu do tych. –
@MikePrecup: A jeszcze lepiej, 'List.Count (x =>! X.Value.Equals (" Nie zweryfikowany "))' –
Czy upewniłeś się, że nie popełniłeś żadnego z tych błędów [Benchmarków wydajności] (http : //tech.pro/blog/1293/c-performance-benchmark-mistakes-part-one)? – Corak