LINQ to SQL .Count取代了大量處理時間並降低了性能。LINQ to SQL .Count取代了大量處理時間並降低了性能
我做遞歸循環和一個孩子(讓調用它的父),我要檢查下它的兒童人數做出決定是否將其列入與否。
伯爵太慢8毫秒:(120父記錄。
任何想法,使之更快。
LINQ to SQL .Count取代了大量處理時間並降低了性能。LINQ to SQL .Count取代了大量處理時間並降低了性能
我做遞歸循環和一個孩子(讓調用它的父),我要檢查下它的兒童人數做出決定是否將其列入與否。
伯爵太慢8毫秒:(120父記錄。
任何想法,使之更快。
您可以選擇從數據庫的投影獲取父和子元素的計數它了。這避免了輪跳閘到數據庫中。
var query = from x in DataContext.Parents
select new {Parent = x, Count = x.Childs.Count() };
現在遍歷結果和任何你想下一個。
若y歐只想濾色器(= where子句中)的基礎上的子元素計數,像這樣做:
var query = from x in DataContext.Parents
where c.Childs.Count() > 10
select x;
的LINQ to SQL會嘗試將您的呼叫轉換爲IEnumerable.Count()
到SELECT COUNT(*)
,這應該是非常高性能的。
對我來說,這聽起來像你循環的結果集,做另一 Linq到SQL查詢每個結果。在這種情況下,它會一直很慢,因爲你會做很多額外的數據庫往返。
你將不得不重寫你的問題讓孩子們一起算在第一個查詢的時候了。
Na沒有做另一個Linq-to-sql 有父和子實體集 – soldieraman 2010-05-02 17:58:04
只要在子引用上調用Count()實際上是另一個linq-to-sql查詢(雖然非常簡單)將導致另一個sql查詢往返數據庫。 – 2010-05-02 19:37:47
好的,你能否提出一個更好的解決方法? – soldieraman 2010-05-03 01:13:13
你可以發佈生成的SQL嗎? – 2010-05-02 16:56:17
有多少物品正在計數?你能提供一個你的方法的例子嗎? – Brettski 2010-05-02 16:57:49
請張貼一些代碼 - 如果真實代碼太大或以其他方式無法發佈,請使用相同的行爲做一個小例子,這將有助於獲得更好的答案。 – 2010-05-02 18:03:37