【发布时间】:2013-11-23 18:52:14
【问题描述】:
我正在使用 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 秒!
【问题讨论】:
-
为什么要将 30k 行加载到 DataGrid 中?用户查看这么多行的目的是什么?网格不能分页吗?
-
我知道,我知道...我们已经在应用程序中进行了分页,并且没有性能问题。但用户不喜欢它——他们想一次查看所有行。没有内存问题,并且由于 UI 虚拟化,网格也没有问题。只用 EF :/
-
如果用户不喜欢分页,您可以加载 200 个实体,当用户滚动到网格末尾时,您可以加载接下来的 200 个连续实体。所以你让用户看不到真正的分页(比如下一页/上一页),你可以加载更少的数据。
-
@xxMUROxx 问题是 EF 当前存在物化问题(请参阅:entityframework.codeplex.com/workitem/1781)。当您获取大量行时它更明显,但当您获取小集合时它同样存在。
标签: c# .net performance entity-framework entity-framework-5