我想知道用什么更好。
对列表进行排序或LINQ的IComparer类和Compare方法。这两种方法都很好用,但哪一种更适合大型列表。
发布于 2010-07-31 23:02:18
我选择LINQ有两个原因。
如果考虑到OrderBy子句中的lambda表达式被编译成一个函数--这几乎就是实现IComparer所能得到的全部结果,那么我希望单线程实现的性能大致相同。
也就是说,通过更改排序算法以适应数据已经排序的方式,而不是通过更改比较方法,您可能会获得更多的性能提升。但我敢打赌今天早上的咖啡,您的Linq语句中的OrderBy使用了Quicksort的实现,因此在一般情况下它可能已经相当不错了。
发布于 2010-07-31 23:05:27
默认情况下,对于所有基于集合的操作,我更喜欢使用LINQ。这里的优点是,我不必对所使用的集合类型做太多假设(OrderBy在IEnumerable上工作)。
如果你有一个IList<T>,那么List.Sort可能会更快。
无论如何,我不会担心它,除非有一个已证实的(即测量的)性能问题
发布于 2010-07-31 23:19:50
我认为这两个在语义上是非常不同的,IComparer接口让你定义你的类型是如何自然地排序的,OrderBy给你提供了一种按某个特定的键对你的对象进行排序的方法,例如,给定一个Person对象的列表,对于查询A按名字排序列表,对于查询B按照年龄排序列表。
IComparer为您提供了更大的灵活性,但由于LINQ需要一个接受对象类型并返回用于排序的键的Func,所以您返回的任何键仍然需要实现LINQ接口。
就大型列表的性能而言,根据您在Compare方法中所做的工作,我认为这两种方法之间可能几乎没有什么不同,尽管最好只是针对您的类型进行测试。
https://stackoverflow.com/questions/3378603
复制相似问题