在性能上有什么区别吗?
List<T>.Sort Method (Comparison<T>)和
List<T>.Sort Method (IComparer<T>)?是否存在任何结构(软件架构)好处?
什么时候使用compare方法而不是compare类,反之亦然?
编辑:
List<T>.Sort Method (IComparer<T>)的速度更快。谢谢Jim Mischel!
在我的PC上,性能差异约为1%。
似乎compare类是更快的一个。
发布于 2013-03-20 21:48:07
在我的记忆中,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 21:35:06
不同之处在于,第一个接受方法(匿名或非匿名),第二个接受比较器对象的实例。有时,定义复杂且可定制的比较器类要比在单个函数中编写所有内容容易得多。
我更喜欢第一个用于一维的简单排序,而后者用于例如数据网格的多维排序。
使用比较器,您可以拥有私有成员,这通常有助于缓存。这在某些情况下很有用(同样,在网格中显示的大型数据集的复杂排序中)。
https://stackoverflow.com/questions/15524989
复制相似问题