繁体   English   中英

EF快速调用并从存储过程返回,但是将其转换为列表需要20秒才能完成1000条记录

[英]EF calls and returns from stored procedure fast but then converting it to list takes 20 seconds for 1000 records

我正在调试使用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条记录就需要那么多时间呢? 还是可能仍要返回数据库进行转换?
  2. 有什么我可以做的来加快速度吗? 当调用函数时,它返回非常快。

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

  • 实体由上下文的更改跟踪器跟踪。
  • 实体执行延迟加载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM