我编写了一个非常通用的 LINQ 查询,该查询在我的整个应用程序中都使用,并且在除一种情况之外的所有情况下都能很好地工作。我目前只运行 SQL Express,所以在我的下载完成之前无法跳转到 sql profiler,所以在此之前,我的以下 LINQ 中是否有一些突出的东西会导致大幅减速?
以下是执行内容的摘要。延迟当然是在 ToList 调用上,需要 30 秒。我将这段代码用于我所有的网格视图,只有一个可以保留它。MyGridView 是一个 sql 视图,在问题数据中只需 2 秒即可通过 Sql Management Studio 执行并返回所有 16417 条记录。最后,当我请求接近数据末尾的页面时,它只需要这么长时间,所以我假设它与 Take and 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 并在我发现任何提示时发布。