比较方法和比较类在性能上有什么区别吗?
本文关键字:比较 什么 区别 性能 方法 | 更新日期: 2023-09-27 18:04:47
List<T>.Sort Method (Comparison<T>)
和
List<T>.Sort Method (IComparer<T>)?
是否存在任何结构(软件架构)的好处?
什么时候使用compare方法而不是compare类,反之亦然?
编辑: List<T>.Sort Method (IComparer<T>)
更快。谢谢吉姆·米歇尔!
在我的电脑上,性能差异约为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
实现的信息:比较和IComparer