有没有一个很好的来源,概述这个优化?
这将是非常有趣的,因为以前我知道上述,我从来没有使用Count(),因此经常返回一个列表< T>而不仅仅是IEnumerable< T>因为我知道呼叫者需要经常需要列表的实例计数.
但是请记住,Count()并不真正计算IEnumerable< T>中包含的实例.但是从返回的列表返回Count-property的结果,因此不会使性能下降,从而使我将许多返回的类型从List更改为IEnumerable< T>.
解决方法
> Count
使用Count
属性,如果序列实现ICollection<T>
,并且不使用谓词. (在.NET 4 Count也针对非通用型ICollection
进行了优化.)
> ElementAt
/ElementAtOrDefault
通过索引访问序列实现IList<T>
.
> Last
/LastOrDefault
通过索引进行访问,如果序列实现IList< T>并且不使用谓词.
> ToArray
/ToList
如果序列实现ICollection< T>,则使用Count属性更有效地分配内存. (但它们都不优于ICollection.)
可能在那里的优化,但不是:
> Last / LastOrDefault在使用谓词的情况下不进行优化.没有理由不能对IList T进行优化,通过列表向后迭代,并通过索引访问每个元素.
> SequenceEqual
可以优化ICollection< T>和ICollection,使用Count属性来确定列表是否是相同的长度,如果不是,则提前发布.
> Skip
可以针对IList T进行优化,通过索引访问元素并直接在索引n处开始,而不是迭代和丢弃前n个元素.
> ToArray / ToList也可以优化ICollection,使用Count属性更有效地分配内存.
> ToDictionary
可以优化ICollection< T>和ICollection,使用Count属性更有效地分配内存.