Разница в производительности между ними.где(…).Любой() или любого(...) [дубликат]
Возможный дубликат:
методы расширения LINQ-Any () vs Where () vs Exists()
Учитывая список объектов в памяти, я выполнил следующие два выражения:
myList.where(x => x.Name == "bla").Any()
Vs
myList.Any(x => x.Name == "bla")
Последнее было самым быстрым всегда, я полагаю, что это связано с тем, где перечисляются все пункты. Но это случается и тогда, когда нет спичек.
Я не уверен в точной причине, хотя. Есть ли случаи, когда это просматривается разница в производительности разве это не так, как если бы он спрашивал Нхиб?
Ура.
1 ответ:
Таким образом, с точки зрения производительности (немного), вам лучше использовать форму
Any()
с предикатом может выполнять свою задачу без итератора (yield return
). ИспользованиеWhere()
создает итератор, который добавляет имеет влияние на производительность (хотя и очень небольшое).Any()
, которая принимает предикат (x => x.Name == "bla"
). Что, лично я нахожу более читабельным...На боковой ноте
Where()
не обязательно перечисляет все элементы, он просто создает итератор, который будет перемещаться по элементы, как они запрашиваются, таким образом, вызовAny()
послеWhere()
будет управлять итерацией, которая остановится на первом элементе, который он находит, что соответствует условию.Таким образом, разница в производительности не , что
Where()
перебирает все элементы (в linq-to-objects), потому что это действительно не нужно (если, конечно, он не находит тот, который удовлетворяет его), это то, что предложениеWhere()
должно настроить итератор для обхода элементов, в то время какAny()
с помощью предикат - нет.