我已經寫了一個非常通用的LINQ查詢,它在整個我的應用程序中都使用,並且對於所有情況都非常適用,但只有一個。我目前只運行SQL Express,因此在我的下載完成之前無法跳入sql profiler,所以在那之前,我的後續LINQ中會出現什麼問題會導致大量減速?與Paging相關的LINQ操作可能會減慢我的查詢速度?
下面是什麼得到執行的總結。 HoldList當然是ToList調用,並且需要30秒。我將這段代碼用於我所有的網格視圖,並且只有一個可以保留它。 MyGridView是一個sql視圖,在問題中,數據只需要2秒鐘即可執行並通過Sql Management Studio返回所有16417個記錄。最後,當我請求頁面接近數據末尾時,這隻需要很長時間,所以我認爲這與Take和Skip實現有些相關。
private void Demo()
{
// using LINQ To Entity...
using (var entities = new MyEntities())
{
int page = 1641;
int pageSize = 10;
IQueryable<MyGridView> results = entities.MyGridView;
results = results.Where(r => r.DeletedDate == null);
var resultCount = results.Count();
results = ApplyPaging(results, page, pageSize);
// On the problem data, ToList takes a good 30 seconds to return just 10 records
var resultList = results.ToList();
}
}
private IQueryable<T> ApplyPaging<T>(IQueryable<T> data, int currentPage, int pageSize)
{
if (pageSize > 0 && currentPage > 0)
{
data = data.Skip((currentPage - 1) * pageSize);
}
data = data.Take(pageSize);
return data;
}
任何事情都會因爲壞,錯,危險而跳出來嗎?當我得到安裝的分析器的副本時,我會嘗試通過生成的sql併發布,如果我在那裏找到任何提示。
此代碼中的計數步驟非常快。我只把它包括在內,因爲它是唯一被稱爲的其他東西。所以除非它對查詢有後遺症,否則它不會成立。 – Arkiliknam 2012-07-11 10:10:21
是的,我意識到它會在你遇到下面的問題代碼之前完成的,我的錯誤。 – 2012-07-11 10:10:49