为什么第一个linq比第二个linq快20倍[获取最大值]

时间:2013-02-27 18:32:29

标签: c# .net vb.net linq

有人可以解释为什么这些方法之间的差异大约有20倍!? 我的逻辑可以接受2次和4次之间的差异,但我无法理解为什么会发生这种情况20次。

代码:

//Method 1 which took 00:00:00.82
DateTime at = DateTime.Now;
for (int i = 0; i < 1000; i++ ) {
    var x = (from m in brd.MohreHa select new { m, am = m.GetPossibleMoves().Count() }).OrderByDescending(o => o.am).First().m;

}
var att = DateTime.Now - at;


//Method 2 which took 00:00:15.31
DateTime bt = DateTime.Now;
for (int i = 0; i < 1000; i++) {
    var y = brd.MohreHa.First(m => m.GetPossibleMoves().Count() == brd.MohreHa.Max(a => a.GetPossibleMoves().Count()));
}
        var btt = DateTime.Now - bt;

1 个答案:

答案 0 :(得分:6)

第二个必须计算集合中每个项目的Max() 。这有效地使brd.MohreHa.First调用二次方,因为它将针对每个项目检查每个项目一次。

第一个选项每次只调用Count(),然后在最后执行单个排序。这样就无需枚举Max() N次。

相关问题