我正在使用Entity Framework 5,我正在执行一个返回相对较大的结果集的查询,大约30,000行。查询本身执行速度非常快,只需要大约700毫秒。
构建linq查询后,我调用query.Load();
,然后将DataContext.Set<MyType>.Local
作为ObservableCollection
返回给调用者。结果显示在可编辑的网格中。
问题在于query.Load();
调用 - 它需要大约60秒,这太长了。我是猜测这是EF将结果转换为.NET对象的地方吗?我尝试过分析,但它不会比IQueryable.Load
:/
任何想法如何才能提高效果?
顺便说一下,我尝试升级到EF6以查看是否有帮助,但实际上情况变得更糟,query.Load();
通常需要100秒!
答案 0 :(得分:0)
在需要结果之前,不会执行Linq to Entities查询。那是计算成本“支付”的时候。在此之前,查询只是一个查询。正如Stefan建议的那样,你应该尝试添加一些过滤器,或者至少使用.Skip和.Take方法的分页机制。
您还可以查看有关linq分页的this MSDN文章。
希望我帮忙!