为什么第一个动作比第二个快20倍[获得最大值]

本文关键字:最大值 20倍 第一个 第二个 为什么 | 更新日期: 2023-09-27 18:01:21

谁能解释一下为什么这些方法之间有大约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;

为什么第一个动作比第二个快20倍[获得最大值]

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

第一个选项每次只执行Count()调用,然后在最后执行单个排序。这避免了枚举Max() N次的需要。