2

これらの方法の間に約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;
4

1 に答える 1

6

2 番目は、コレクション内のすべてのアイテムを計算するMax()必要があります。これにより、アイテムごとに 1 回ずつすべてのアイテムに対してチェックが行われるため、効果的に呼び出しが 2 次になります。brd.MohreHa.First

最初のオプションは、Count()毎回呼び出しを行うだけで、最後に 1 つの順序付けを行います。Max()これにより、 N 回列挙する必要がなくなります。

于 2013-02-27T18:34:31.383 に答える