我有一個LINQ查詢從基於一個ID列(其中id = @ ID)LINQ VS SQL(或.NET應用程式與SQL Server Management Studio中)
此查詢需要4秒視圖中檢索行跑。我已經使用SQL Server Profiler來檢查由linq執行的查詢,並且如果我將該查詢直接複製到management studio並執行,查詢只需要56ms。
這個指數時間增加在我的應用程序中的所有linq查詢中都是一致的。當(WPF)應用程序中執行< 100ms時,可能會導致執行時間延長?
== ==編輯
我已經成功地進一步孤立,言論表明探查持續時間;
/* 3953ms, 111487 reads */
context.SkuView.Where(p => p.TermId == 35 && !p.IsDeleted).ToList();
/* 90ms, 173 reads */
context.SkuView.Where(p => p.TermId == 35).ToList();
如果我把(sql呈現的)linq查詢直接粘貼到我得到的ssms中;
/* 250ms, 173 reads */
SELECT * FROM SkuView WHERE TermId == 35 AND IsDeleted = 0
/* 250ms, 173 reads */
SELECT * FROM SkuView WHERE TermId == 35
所以,問題有事情做與讀取使用p.IsDeleted時通過LINQ算...
哇,這是一個巨大的時間差。要清楚,運行4秒是根據SQL事件探查器執行查詢所花費的時間? – Pandincus 2010-12-09 01:05:48
正確。 linq使用exec sp_executesql執行查詢,Profiler顯示4秒的運行時間。如果我複製剛纔運行的確切的exec _sp_executesql,並在SSMS中執行它,profiler顯示58ms – 2010-12-09 01:12:57
L2S不是查詢數據庫的最有效的方式,但這是一個非常大的差異。 – Phill 2010-12-09 01:17:19