加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么List.Sort()会变慢?

发布时间:2020-12-15 17:42:46 所属栏目:百科 来源:网络整理
导读:所以我注意到树视图花了很长时间才排序,首先我发现在添加每个已排序的项目后,大部分时间都花在重新绘制控件上.但eitherway我有一个感觉:名单 T的.sort()花费比合理的长,所以我用一个自定义的排序方法进行基准测试它反对.结果很有趣,名单 T的.sort()花了约20
所以我注意到树视图花了很长时间才排序,首先我发现在添加每个已排序的项目后,大部分时间都花在重新绘制控件上.但eitherway我有一个感觉:名单< T>的.sort()花费比合理的长,所以我用一个自定义的排序方法进行基准测试它反对.结果很有趣,名单< T>的.sort()花了约20倍的时间,这是我曾经在.NET中遇到这样一个简单的任务中表现最令人失望的.

我的问题是,这可能是什么原因?我的猜测是调用比较委托的开销,进一步必须调用String.Compare()(在字符串排序的情况下).增加列表的大小似乎会增加性能差距.有任何想法吗?我正在尝试尽可能多地使用.NET类,但在这种情况下我不能.

编辑:

static List<string> Sort(List<string> list)
    {
        if (list.Count == 0)
        {
            return new List<string>();
        }

        List<string> _list = new List<string>(list.Count);
        _list.Add(list[0]);

        int length = list.Count;

        for (int i = 1; i < length; i++)
        {
            string item = list[i];

            int j;

            for (j = _list.Count - 1; j >= 0; j--)
            {
                if (String.Compare(item,_list[j]) > 0)
                {
                    _list.Insert(j + 1,item);

                    break;
                }
            }

            if (j == -1)
            {
                _list.Insert(0,item);
            }
        }

        return _list;
    }

解决方法

我没有时间对它进行全面测试,因为我有一个停电(现在从手机上写),但看起来你的代码(来自Pastebin)几次排序已经排序的列表,所以看起来你的算法可能更快…对已排序的列表进行排序.如果标准.NET实现是快速排序,这将是很自然的,因为QS在已经排序的列表上具有最坏的情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读