Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用实体框架5和大结果集时的性能问题_C#_.net_Performance_Entity Framework_Entity Framework 5 - Fatal编程技术网

C# 使用实体框架5和大结果集时的性能问题

C# 使用实体框架5和大结果集时的性能问题,c#,.net,performance,entity-framework,entity-framework-5,C#,.net,Performance,Entity Framework,Entity Framework 5,我正在使用EntityFramework5,我正在执行一个查询,返回一个相对较大的结果集,大约30000行。查询本身执行速度非常快,只需大约700毫秒 构建linq查询后,我调用query.Load(),然后将DataContext.Set.Local作为可观察集合返回给调用者。结果显示在可编辑的网格中 问题在于query.Load()呼叫-大约需要60秒,这太长了。我猜这就是EF将结果转换为.NET对象的地方?我已经尝试过评测,但它不会比IQueryable.Load更深入:/ 有什么办法可以

我正在使用EntityFramework5,我正在执行一个查询,返回一个相对较大的结果集,大约30000行。查询本身执行速度非常快,只需大约700毫秒

构建linq查询后,我调用
query.Load()
,然后将
DataContext.Set.Local
作为
可观察集合
返回给调用者。结果显示在可编辑的网格中

问题在于
query.Load()呼叫-大约需要60秒,这太长了。我猜这就是EF将结果转换为.NET对象的地方?我已经尝试过评测,但它不会比
IQueryable.Load更深入:/

有什么办法可以提高绩效吗


顺便说一句,我尝试升级到EF6,看看这是否有帮助,但实际上情况变得更糟,使用
query.Load()通常需要100秒

在需要结果之前,不会执行Linq to Entities查询。这就是计算成本被“支付”的时候。在此之前,查询只是一个查询。正如Stefan所建议的,您应该尝试添加一些过滤器,或者至少使用.Skip和.Take方法添加一个分页机制

您还可以查看有关linq分页的MSDN文章


希望我能帮忙

为什么要将30000行加载到数据网格中?用户查看这么多行的索引是什么?不可能分页网格吗?我知道,我知道。。。我们已经在应用程序中进行了分页,并且没有性能问题。但是用户不喜欢它——他们希望一次查看所有行。没有内存问题,而且由于UI虚拟化,网格也没有问题。Just with EF:/如果用户不喜欢分页,可以加载200个实体,当用户滚动到网格末尾时,可以加载接下来的200个连续实体。因此,您必须确保用户看不到真正的分页(如下一页/上一页),您可以加载更少的数据。@xxMUROxx问题是EF当前在物化方面存在问题(请参阅:)。它在获取大量行时更为明显,但在获取小集合时同样如此。