List<T>.Sort Method (Comparison<T>)
和
List<T>.Sort Method (IComparer<T>)?
不存在任何结构(软件体系结构)利益之间在性能上有什么区别?
您何时使用比较方法而不是比较类,反之亦然?
编辑:
的List<T>.Sort Method (IComparer<T>)
更快。感谢Jim Mischel!
我的电脑的性能差异大约为1%。
看来,比较类是更快的。
List<T>.Sort Method (Comparison<T>)
和
List<T>.Sort Method (IComparer<T>)?
不存在任何结构(软件体系结构)利益之间在性能上有什么区别?
您何时使用比较方法而不是比较类,反之亦然?
编辑:
的List<T>.Sort Method (IComparer<T>)
更快。感谢Jim Mischel!
我的电脑的性能差异大约为1%。
看来,比较类是更快的。
我记得,List.Sort(Comparer<T>)
实例化一个IComparer<T>
,然后调用List.Sort(IComparer<T>)
。
它看起来是这样的:
class SortComparer<T>: IComparer<T>
{
private readonly Comparison<T> _compare;
public SortComparer(Comparison<T> comp)
{
_compare = comp;
}
public int Compare(T x, T y)
{
return _compare(x, y);
}
}
public Sort(Comparison<T> comp)
{
Sort(new SortComparer(comp));
}
所以他们真的最终会做同样的事情。当我将这些东西计时(回到.NET 3.5)时,Sort(IComparer<T>)
稍微快一点,因为它不必在每次调用时都做额外的引用。但差距真的不足以担心。这绝对是一种使用代码中最好的方法,而不是最快的方法。
一点关于它,包括有关默认IComparer
实现信息:Of Comparison and IComparer
我不知道,内部实现的好的知识:) – 2013-03-20 13:51:34
区别在于第一个接受方法(匿名或不接受),第二个接受比较器对象的实例。有时候定义复杂和可定制的比较器类比单独编写一个函数更容易。
我更喜欢第一个用于简单排序的一维,后者用于多维排序。数据网格。
使用比较器可以让私人成员经常帮助缓存。这在某些情况下很有用(同样,在网格中显示的大型数据集的复杂排序中)。
这种答案就是我所期望的。谢谢! – 2013-03-20 13:41:41
你有没有尝试过自己第一?请阅读[常见问题]和[问] – 2013-03-20 13:32:21
可以想象,'IComparer'方法需要实现一个实现'IComparer '的对象 - 这将涉及时间和内存。如果你想分享多个类别的比较,'IComparer '将是更灵活的路线。 –
2013-03-20 13:36:20
@SonerGönül:是的,我可以在这两种情况下检查自己的表现,但在这种情况下,表现并不是最重要的问题,尽管你可以一开始就思考。如何使用它更重要。 – 2013-03-20 13:39:53