首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >compare方法和compare类的性能有什么不同吗?

compare方法和compare类的性能有什么不同吗?
EN

Stack Overflow用户
提问于 2013-03-20 21:30:14
回答 2查看 168关注 0票数 2

在性能上有什么区别吗?

代码语言:javascript
复制
List<T>.Sort Method (Comparison<T>)

代码语言:javascript
复制
List<T>.Sort Method (IComparer<T>)?

是否存在任何结构(软件架构)好处?

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

编辑:

List<T>.Sort Method (IComparer<T>)的速度更快。谢谢Jim Mischel!

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

似乎compare类是更快的一个。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-20 21:48:07

在我的记忆中,List.Sort(Comparer<T>)实例化一个IComparer<T>,然后调用List.Sort(IComparer<T>)

它看起来像这样:

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2013-03-20 21:35:06

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

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15524989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档