为什么Ordered集合枚举较慢以及如何处理它?

时间:2017-12-22 15:38:01

标签: c# .net performance linq

为什么这段代码:

return kendo.ui.DropDownList.requestData(jQuery("#FromDistrict"))

比这段代码快几倍:

class Cord  : IComparable<Cord>
{
    public int X { get; set; }
    public int Y { get; set; }

    public int CompareTo(Cordother)
    {
            return this.X.CompareTo(other.X);
    }
}


List<Cord> Cords = LoadCords();
stopwatch.Start();

foreach(var cord in Cords)
{
          // do something
}
stopwatch.Stop();

为了提高我的应用程序(处理数百万条记录)的性能,我需要一个有序的集合。我还尝试在List项上使用SortSet和Sort方法并实现List<Cord> Cords = LoadCords().OrderBy(r=> r.x).ToList(); stopwatch.Start(); foreach(var cord in Cords) { // do something } stopwatch.Stop(); 。无论哪种方式,有序列表上的相同迭代比未触及的列表需要更多的时间。为什么这样,我怎样才能使我的排序集合像基本集合一样有效地迭代?

编辑:我只衡量迭代的时间。我知道排序需要时间。循环内发生的操作无关紧要。

字面意思是当我用排序注释掉行时,迭代时间变小了。它不应该,而且在其他基准测试中它不会,但在我目前的应用程序中,这种情况发生了,我想知道是否有人可以就此主题给我一些建议。

1 个答案:

答案 0 :(得分:0)

尝试使用linq查询首先过滤结果,而不是在循环中执行条件。

$host = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHARSET;
$pdo = new PDO($host, DB_USER, DB_PASSWORD);

此外,正如其他建议使用DataTime.Now不会给出准确的结果。使用秒表。