2013-02-27 56 views
2

有人可以解釋爲什麼這些方法之間存在20倍的巨大差異!
2次和4次之間的差異可以接受我的邏輯,但我不明白爲什麼會發生20次。爲什麼第一個linq的行爲比第二個行動快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; 

回答

6

第二個具有計算Max()每一個項目您的收藏英寸這有效地使brd.MohreHa.First調用二次方,因爲它將檢查每個項目的每個項目一次。

第一個選項只是每次調用Count(),然後在最後進行一次排序。這避免了需要枚舉N次的Max()

+0

謝謝。你知道有什麼更好的方法來運行這個查詢1000次,這比我的方法快嗎? – 2013-02-27 18:45:37

+1

@Mahdi如果你不使用LINQ,它會更快,並且只是跟蹤「最大」項目...這將完全避免排序。 – 2013-02-27 18:47:33

相關問題