2009-07-17 32 views

回答

0

忽視交易:

using (PlayerDataContext context = new PlayerDataContext()) 
{ 
    var players = context.Players.ToList(); 
    MethodThatUnexpectedlyTakes25SecondsToComplete(); 
    Console.WriteLine(players.Count()); // Outputs a stale count 
} 
+0

我實在不明白那是怎麼回事了「疑難雜症」。 ToList()明確地將玩家的實體複製到列表中。這就是ToList在任何IEnumerable上所做的事情。 – 2009-07-17 14:35:08

+1

我不同意這是陳舊的...這是一個絕對100%的列表中的項目數量的最新,這是你要求它做的...這只是斷開的數據。 – 2009-07-17 14:36:21

1

最大的一個是延遲執行的損失。除非您對結果進行迭代,否則linq查詢通常不會執行任何操作。調用.ToList()遍歷結果,因此將立即運行查詢。

0

妥協LINQ到SQL的能力,以優化:

using (PlayerDataContext context = new PlayerDataContext()) 
{ 
    // suboptimal 
    var players = context.Players.ToList(); 
    Console.WriteLine(players.Count()); 

    // optimal 
    var playerCount = context.Players.Count(); 
    Console.WriteLine(playerCount); 
}