Moh*_*kar 2 .net c# linq vb.net
有人可以解释为什么这些方法之间的差异大约有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;
Run Code Online (Sandbox Code Playgroud)
第二个具有计算Max()为您的收藏在每一个项目.这有效地使brd.MohreHa.First调用成为二次方,因为它将针对每个项目检查每个项目一次.
第一个选项Count()每次只执行调用,然后在结尾执行单个排序.这避免了枚举Max()N次的需要.