有非常少的保证,但是有一些优化:
使用索引访问扩展方法,比如
ElementAt
,Skip
,Last
或者LastOrDefault
,将检查底层式工具与否IList<T>
,让你得到O(N)的O(1)访问来代替。该
Count
方法检查ICollection
实现,以便此操作为O(1)而不是O(N)。Distinct
,GroupBy
Join
,我相信也设置汇总的方法(Union
,Intersect
和Except
)使用散列,所以他们应该是接近O(N),而不是O(N²)。Contains
检查ICollection
实现,因此如果基础集合也是O(1),例如a ,则 可能 为O(1)HashSet<T>
,但这取决于实际的数据结构,因此不能保证。哈希集会覆盖该Contains
方法,这就是为什么它们是O(1)的原因。OrderBy
方法使用稳定的快速排序,因此它们是O(N log N)个平均情况。
我认为这涵盖了大多数(如果不是全部)内置扩展方法。确实很少有性能保证。Linq本身将尝试利用高效的数据结构,但是编写潜在的低效率代码不是免费的通行证。



