2009-07-13 3 views

ответ

6

Предполагая, что мы говорим о LinqToObjects (очевидно, LinqToSql, LinqToWhatever имеют свои собственные правила), первый будет настолько немного медленнее, поскольку новый итератор должен быть создан, но невероятно маловероятно, чтобы вы заметили разницу. Что касается количества сравнений и количества рассмотренных предметов, время, которое они предпримут, будет практически идентичным.

В случае, если вы беспокоитесь, что будет не случиться, что оператор .где фильтрует список в п элементов и .FirstOfDefault принимает первый из отфильтрованного списка. Обе последовательности будут правильно закорочены

0

Если мы предположим, что в обоих случаях вы используете методы расширения, предоставляемые статическим классом Enumerable, тогда вам будет трудно измерить разницу между ними.

Чем больше формы ...

myCollection.Where(...).FirstOrDefault() 

... будет (технически) производить больше активности памяти (создание посредническую итератора для обработки пункта Where()) и привлечь еще несколько циклов обработки.

Дело в том, что эти итераторах ленивого - оговорка Where() не будет идти Весело весь список оценки предиката, то это будет только проверить, как много элементов, необходимых, чтобы найти один, чтобы пройти.

Смежные вопросы