Обзор фреймворка ... это зависит от обстоятельств. Мои первоначальные инстинкты в гипотетической стране:
Any()
проверяет, есть ли единственное значение. Если да, то возвращается истина. Это операция O (1).
Count()
должен будет выполнить одно из следующих действий:
1) получить доступ к текущему счету элементов в коллекции или 2) подсчитать элементы в коллекции
В лучшем случае (# 1) операция O (1). В худшем случае (# 2) это O (n).
На самом деле Any()
использует итератор коллекции, чтобы определить, есть ли следующее значение. Таким образом, это зависит от коллекции, является ли Any()
операцией O (1). Если это плохая реализация, возможно, это будет O (n).
Например, предположим, что итератор Array глуп и ищет первое ненулевое значение. Он должен проверить каждый элемент в массиве, поэтому Any()
в этом случае означает O (n). (Фактически, Any()
возвращает true
для любого массива длиной> 1).
Count()
пытается увидеть, реализует ли коллекция ICollection
или ICollection<T>
, и если да, возвращает значение свойства Count
. Если базовая реализация сохраняет текущую вкладку, это может быть O (1). В противном случае это может быть O (n) худший случай.
Если перечисляемый не реализует один из этих интерфейсов, Count()
просто выполняет итерацию по всей коллекции, считая по пути. Это О (п).
tl; dr: согласно реализации, Any()
, скорее всего, будет намного быстрее, чем Count()
.
person
Community
schedule
19.08.2015
Any
, как только условие выполнено, метод завершается. СCount
он должен пройти весь путь до конца. Это действительно то, что вы должны были выяснить после небольшого исследования. - person Daniel Kelley   schedule 19.08.2015over 10,000 items
это немного. для меня звучит как микрооптимизация. это вообще твое узкое место? что говорит ваше профилирование? если вы хотите выполнить микрооптимизацию только ради этого, пропустите LINQ полностью. или хотя бы просто PLINQ. - person Num Lock   schedule 19.08.2015