比较方法和比较类在性能上有什么区别吗?

本文关键字:比较 什么 区别 性能 方法 | 更新日期: 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