gpt4 book ai didi

.net - 哪些与分页相关的 LINQ 操作可能会减慢我的查询速度?

转载 作者:行者123 更新时间:2023-12-04 05:39:33 25 4
gpt4 key购买 nike

我编写了一个非常通用的 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;
}

有什么事情会因为不好、错误、危险而跳出来?当我安装了分析器的副本时,我会尝试检查生成的 sql 并在那里找到任何提示。

最佳答案

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com