От: | Ellin | www.rsdn.ru | |
Дата: | 02.07.09 11:57 | ||
Оценка: | 2 (1) |
LINQ to object vs foreachНачал изучать LINQ, и почитав немного про него, задался вопросом, а зачем он нужен? Ведь ту же самую работу можно выполнить с помощью обычного цикла foreach. Сразу возник вопрос, а что с производительностью? Кто будет быстрее? Для этого создал небольшой тест.
Random rnd = new Random();
List< string > names = new List< string >();
for ( int i = 0; i < 1000000; i++ )
{
StringBuilder sb = new StringBuilder();
for ( int j = 0; j < 10; j++ )
{
sb.Append((char) rnd.Next('a',
'z'));
}
names.Add(sb.ToString());
}
List< string > matches = new List< string >();
Stopwatch sw = new Stopwatch();
sw.Start();
foreach ( string s in names )
{
if ( s.StartsWith("d") )
{
matches.Add(s);
}
}
sw.Stop();
Console.WriteLine("standart foreach: {0}",
sw.Elapsed.TotalMilliseconds);
sw.Reset();
sw.Start();
var matchesLinq = (from s in names
where s.StartsWith("d")
select s);
sw.Stop();
Console.WriteLine("linq to object: {0}",
sw.Elapsed.TotalMilliseconds);
Вначале создается список со случайными значениями, а затемосуществляется поиск с помощью foreach и LINQ. И производится замер времени работы.В результате я получил такие значения:standart foreach: 222.3422
linq to object: 0.1737
Паразительно, но скорость выполнения LINQ кода, в 1280 раз выше чем foreach!!!
К тому же запись LINQ гораздо более компактна чем foreach цикл.