2

性能上有没有区别

List<T>.Sort Method (Comparison<T>)

List<T>.Sort Method (IComparer<T>)?

是否存在任何结构(软件架构)优势?

你什么时候使用比较方法而不是比较类,反之亦然?

编辑:

List<T>.Sort Method (IComparer<T>)速度更快。谢谢吉姆米歇尔!

在我的 PC 上,性能差异约为 1%。

似乎比较类是更快的类。

4

2 回答 2

3

不同之处在于第一个接受方法(匿名或不匿名),第二个接受比较器对象的实例。有时,定义复杂且可自定义的比较器类比将所有内容都写在单个函数中更容易。

我更喜欢第一个用于单维的简单排序,而后者用于例如数据网格中的多维排序。

使用比较器,您可以拥有通常可以帮助缓存的私有成员。这在某些情况下很有用(同样,在对显示在网格中的大型数据集进行复杂排序时)。

于 2013-03-20T13:35:05.647 回答
2

我记得,List.Sort(Comparer<T>)实例化 anIComparer<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 和 IComparer

于 2013-03-20T13:48:06.953 回答