Есть ли между myCollection любое различие в производительности. Где (…).FirstOrDefault () и myCollection. FirstOrDefault (…)

Покрытие кода имеет некоторое значение, но иначе я склонен полагаться больше на профилирование кода, чтобы сказать, является ли код дрянным.

6
задан Myster 13 July 2009 в 02:02
поделиться

2 ответа

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

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

6
ответ дан 17 December 2019 в 02:32
поделиться

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

Более длинная форма ...

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

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

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

0
ответ дан 17 December 2019 в 02:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: