我在用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 个项目的代理。
Why is ToList()
方法这么慢?我实际上认为问题不在于 ToList() 方法,而可能是 EF 问题,或者糟糕的设计问题。
有人有过这样的经历吗?
EDIT:
这些是条件:
_repository.Requests.Where(r => ids.Any(a => a == r.Student.Id) && r.StartDate <= cycle.EndDate && r.EndDate >= cycle.StartDate)
所以基本上,我可以检查是否Student
id 在我的 ID 列表中并检查日期是否匹配。