首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ orderby vs IComparer

LINQ orderby vs IComparer
EN

Stack Overflow用户
提问于 2010-07-31 22:50:52
回答 3查看 2.9K关注 0票数 14

我想知道用什么更好。

对列表进行排序或LINQ的IComparer类和Compare方法。这两种方法都很好用,但哪一种更适合大型列表。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-31 23:02:18

我选择LINQ有两个原因。

  • LINQ查询通常较短且更易于阅读。
  • 如果您确实有大量的元素,Linq还为您提供了使用scale out to multiple CPU cores的能力,这可能会帮助您摆脱PLinq

如果考虑到OrderBy子句中的lambda表达式被编译成一个函数--这几乎就是实现IComparer所能得到的全部结果,那么我希望单线程实现的性能大致相同。

也就是说,通过更改排序算法以适应数据已经排序的方式,而不是通过更改比较方法,您可能会获得更多的性能提升。但我敢打赌今天早上的咖啡,您的Linq语句中的OrderBy使用了Quicksort的实现,因此在一般情况下它可能已经相当不错了。

票数 10
EN

Stack Overflow用户

发布于 2010-07-31 23:05:27

默认情况下,对于所有基于集合的操作,我更喜欢使用LINQ。这里的优点是,我不必对所使用的集合类型做太多假设(OrderBy在IEnumerable上工作)。

如果你有一个IList<T>,那么List.Sort可能会更快。

无论如何,我不会担心它,除非有一个已证实的(即测量的)性能问题

票数 4
EN

Stack Overflow用户

发布于 2010-07-31 23:19:50

我认为这两个在语义上是非常不同的,IComparer接口让你定义你的类型是如何自然地排序的,OrderBy给你提供了一种按某个特定的键对你的对象进行排序的方法,例如,给定一个Person对象的列表,对于查询A按名字排序列表,对于查询B按照年龄排序列表。

IComparer为您提供了更大的灵活性,但由于LINQ需要一个接受对象类型并返回用于排序的键的Func,所以您返回的任何键仍然需要实现LINQ接口。

就大型列表的性能而言,根据您在Compare方法中所做的工作,我认为这两种方法之间可能几乎没有什么不同,尽管最好只是针对您的类型进行测试。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3378603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档