加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 有没有一个很好的来源,可以概述linq优化?

发布时间:2020-12-15 17:39:18 所属栏目:百科 来源:网络整理
导读:Linq做了很多聪明的事情,例如使用Count()方法在IList上返回Count-property的结果. 有没有一个很好的来源,概述这个优化? 这将是非常有趣的,因为以前我知道上述,我从来没有使用Count(),因此经常返回一个列表 T而不仅仅是IEnumerable T因为我知道呼叫者需要经
Linq做了很多聪明的事情,例如使用Count()方法在IList上返回Count-property的结果.
有没有一个很好的来源,概述这个优化?

这将是非常有趣的,因为以前我知道上述,我从来没有使用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属性更有效地分配内存.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读