Exekveringstid – Linq vs For

Vilket går egentligen snabbast att exekvera när man vill hitta antal värden från en lista, via linq eller med klassiska loopar?

Testade med en metod som räknar antalet förekomster från en lista med 10.000.000 värden. För att få fram ett medelvärde fick räknesnurran gå 10 varv.

private void linqVsCasual(bool isLinq)
{
List<double> _listTimes = new List<double>();
int _numberOfIterations = 10;

for (int z = 0; z < _numberOfIterations; z++)
{
List<int> _listInts = new List<int>(10000000);
for (int i = 0; i < _listInts.Capacity; i++)
_listInts.Add((i + 1) * 3 % 11);

DateTime dtStart = DateTime.Now;

if (isLinq)
int _count = _listInts.Where(x => x == 5).Count();
else
{
int _count = 0;
for (int i = 0; i < _listInts.Count; i++)
if (_listInts[i] == 5)
_count++;
}
_listTimes.Add((DateTime.Now – dtStart).TotalMilliseconds);
}
Console.WriteLine(“High: ” + Math.Round(_listTimes.Max(), 0) + “, Low: ” + Math.Round(_listTimes.Min(), 0) + “,  Avg milliseconds: ” + Math.Round(_listTimes.Average(), 0));
}

Fick dessa värden med Linq:
High: 210, Low: 180,  Avg milliseconds: 184
High: 221, Low: 180,  Avg milliseconds: 189
High: 221, Low: 180,  Avg milliseconds: 193

Med loopar:
High: 90, Low: 70,  Avg milliseconds: 78
High: 90, Low: 70,  Avg milliseconds: 75
High: 80, Low: 70,  Avg milliseconds: 72

Utifrån detta enkla test var Linq 2-3 ggr så långsam på att räkna antal värden i listan jämfört med en for loop. Men och andra sidan krävs det bara en rad för Linq och 4 för for-loopen för att komma till samma resultat.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.