EF快速调用并从存储过程返回,然后将其转换为列表,需要20秒才能获得1000条记录

问题描述 投票:1回答:1

我正在调试一段使用EF作为ORM的代码。现在,我从应用程序中看到了一些有趣的行为:

这是我调用存储过程的代码:

List<RequestListEntity> results = new List<RequestListEntity>();
var temp = System.Data.Object.ObjectContext.ExecuteFunction<T>("storedProcedure", param);

foreach (var item in temp)
{
    results.Add(item);
}

观察:

  1. 当我在服务器上运行存储过程时,速度非常快。它与表连接,但在一秒内返回1000条记录
  2. 当我使用上面显示的代码从C#调用存储过程时,它也会在一秒内返回并返回总共1000个条目的objectResult<T>
  3. 现在,当我尝试迭代结果或尝试将结果转换为List时,它会慢得多。

现在这提出了很多问题:

  1. 如果它从DB返回的速度如此之快,那么仅仅转换1000条记录需要花费这么多时间?或者它仍然可以返回到DB进行转换?
  2. 我有什么办法可以让它快速吗?当它调用该函数时,它返回的速度非常快。
c# .net entity-framework
1个回答
0
投票

性能问题是由于延迟加载和对象跟踪。当此方法调用result映射到实体类型时,会发生两件事情,当执行context.Database.SqlQuery时不会发生这种情况:

  • 实体由上下文的更改跟踪器跟踪。
  • 实体执行延迟加载。
© www.soinside.com 2019 - 2024. All rights reserved.