Разница в производительности между ними.где(…).Любой() или любого(...) [дубликат]


Возможный дубликат:
методы расширения LINQ-Any () vs Where () vs Exists()

Учитывая список объектов в памяти, я выполнил следующие два выражения:

myList.where(x => x.Name == "bla").Any() 

Vs

myList.Any(x => x.Name == "bla")
Последнее было самым быстрым всегда, я полагаю, что это связано с тем, где перечисляются все пункты. Но это случается и тогда, когда нет спичек.

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

Ура.

1 3

1 ответ:

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

Таким образом, с точки зрения производительности (немного), вам лучше использовать форму Any(), которая принимает предикат (x => x.Name == "bla"). Что, лично я нахожу более читабельным...

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

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