- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个非常通用的 LINQ 查询,它在我的应用程序中使用,并且适用于所有情况,但只有一种情况。我目前只运行 SQL Express,所以在我的下载完成之前无法跳转到 sql profiler,所以在那之前,在我的以下 LINQ 中是否有一些突出的东西会导致严重的减速?
以下是执行内容的摘要。暂停当然是在 ToList 调用上,需要 30 秒。我将这段代码用于我所有的网格 View ,并且只有一个可以使用它。 MyGridView 是一个 sql View ,在问题数据中只需要 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;
}
最佳答案
见 http://msdn.microsoft.com/en-us/library/bb357513.aspx#1
Skip method is very useful with LINQ to SQL to organize server-side results paging, and some more things. But there are performance issues in some cases, because LINQ can build too difficult SQL queries from specified LINQ expressions. I touched this problem with MS SQL Server 2008. (...)
(...) if there are 1000000 records in the Orgs table this query will be executed very long time because DB server will sort records in memory (unlikely you have an appropriate index with all columns ordering). And even so simple query
orgs.Skip(10).Count() requires a significant amount of time, while
orgs.Count()-10 performes much more quickly :)
关于.net - 哪些与分页相关的 LINQ 操作可能会减慢我的查询速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11430190/
java.lang.Throwable 的哪些子类可能被空语句抛出? 通过短语“空语句”,我指的是“无”、“分号”和“分号”: // .... A(); B(); C(); try { //
我是一名优秀的程序员,十分优秀!