Использование reflector Я заметил, что System.Linq.Enumerable.Count имеет в нем условие, чтобы оптимизировать его для случая, когда переданный IEnumerable<T> фактически является ICollection<T>. Если листинг преуспевает, метод Count не требует итерации по каждому элементу, но может вызвать метод Count ICollection.
Исходя из этого, я начал думать, что IEnumerable<T> можно использовать как просмотр в режиме просмотра только для чтения, без потери производительности, которую я изначально ожидал, на основе API IEnumerable<T>
Мне было интересно, сохраняется ли оптимизация Count, когда IEnumerable<T> является результатом оператора Select над ICollection, но на основе отраженного кода этот случай не оптимизирован и требует итерация по всем элементам.
Вы делаете те же выводы из рефлектора? Что может быть причиной отсутствия этой оптимизации? Мне кажется, что в этой общей операции много времени потрачено впустую. Требует ли спецификация, чтобы каждый элемент оценивался, даже если граф можно определить без этого?