c# - EF LINQ ToList 非常慢

标签 c# .net linq entity-framework ef-code-first

我正在使用 ASP NET MVC 4.5 和 EF6,代码优先迁移。

我有这段代码,大约需要 6 秒。

var filtered = _repository.Requests.Where(r => some conditions); // this is fast, conditions match only 8 items
var list = filtered.ToList(); // this takes 6 seconds, has 8 items inside

我以为这是因为关系,它必须在内存中构建它们,但事实并非如此,因为即使我返回 0 个字段,它仍然很慢

var filtered = _repository.Requests.Where(r => some conditions).Select(e => new {}); // this is fast, conditions match only 8 items
var list = filtered.ToList(); // this takes still around 5-6 seconds, has 8 items inside

现在 Requests 表非常复杂,有很多关系并且有大约 16k 项。另一方面,过滤后的列表应该只包含 8 个项目的代理。

为什么 ToList() 方法这么慢?我实际上认为问题不在 ToList() 方法中,而可能是 EF 问题或糟糕的设计问题。

有人遇到过这样的事情吗?

编辑:

这些是条件:

_repository.Requests.Where(r => ids.Any(a => a == r.Student.Id) && r.StartDate <= cycle.EndDate && r.EndDate >= cycle.StartDate)

基本上,我可以检查 Student id 是否在我的 id 列表中,并检查日期是否匹配。

最佳答案

您的filtered 变量包含一个question 查询,但不包含answer。如果您通过调用 .ToList() 请求答案,那是在执行查询时。这就是它速度慢的原因,因为只有当您调用 .ToList() 时,您的数据库才会执行查询。

它被称为延迟执行A google可能会为您提供更多相关信息。

如果您展示了您的一些条件,我们也许可以说出为什么它很慢。

关于c# - EF LINQ ToList 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26733248/

相关文章:

c# - 未找到依赖的 dll

c# - 使用线程时未获取更新的数据

c# - 如何将自定义 IOperationInvoker 添加到端点中的每个操作

c# - 使用asp.net计算时间跨度

c# - ASP.NET Core WebApi 检索最后 n 条记录

sql - 如何在 Linq to Sql 的子查询中选择 MAX

ASP.NET LINQ 数据库供应商

c# - LINQ to Entities in linq join with tuples 仅支持无参数构造函数和初始值设定项

.net - 我需要在每台 Linux PC 上安装 mono 才能在 Linux 平台上运行 .NET 应用程序吗?

c# - 什么是最快的 WinForms 控件套件(商业)