При работе над проектом я столкнулся с следующим фрагментом кода, который поднял флаг производительности.foreach loop Список разностей производительности
foreach (var sample in List.Where(x => !x.Value.Equals("Not Reviewed")))
{
//do other work here
count++;
}
я решил запустить несколько быстрых тестов, сравнивающих первоначальный цикл следующей петли:
foreach (var sample in List)
{
if (!sample.Value.Equals("Not Reviewed"))
{
//do other work here
count++;
}
}
и бросил эту петлю слишком, чтобы увидеть, что происходит:
var tempList = List.Where(x => !x.Value.Equals("Not Reviewed"));
foreach (var sample in tempList)
{
//do other work here
count++;
}
Я также заполнил первоначальный список 3 различными способами: 50-50 (так 50% значений, где «Не просмотрено» и остальное другое), 10-90 и 90-10. Это мои результаты, первая и последняя петли в основном одни и те же, но вторая намного быстрее, особенно в случае 10-90. Почему именно? Я всегда думал, что у Lambda
была хорошая производительность.
EDIT
count++
не на самом деле то, что внутри цикла, я просто добавил, что здесь для демонстрационных целей, я предполагаю, что я должен был использоваться «// сделать что-то здесь»
РЕДАКТИРОВАТЬ 2
Результаты работают каждые один 1000 раз:
Было бы интересно посмотреть, как «List.Where» (x =>! X.Value.Equals («Не просмотрено»)). Count() 'выполняет по сравнению с ними. –
@MikePrecup: Или даже лучше, 'List.Count (x =>! X.Value.Equals (« Не просмотрено »))' –
Вы убедились, что не сделали ни одного из этих [Ошибок производительности Benchmark] (http : //tech.pro/blog/1293/c-performance-benchmark-mistakes-part-one)? – Corak