【发布时间】:2015-04-29 15:28:51
【问题描述】:
我有一个名为 GeographicalLocations 的表,其中包含大约 57K 行。如果我在 SQL Server Management Studio 中运行以下查询,大约需要 1-2 秒才能完成...
select * from GeographicalLocations where Active=1
如果我在 LinqPad 中做同样的事情,大约需要 2-3 秒...
GeographicalLocations.Where (gl => gl.Active)
但是,使用 EF4 的存储库中的相同代码大约需要 10-11 秒...
List<GeographicalLocation> geographicalLocations = new SalesTrackerCRMEntities()
.CreateObjectSet<GeographicalLocation>()
.Where(g => g.Active)
.ToList();
顺便说一下,我们目前卡在 EF4 上,所以请不要建议升级。我很乐意,但目前还有其他因素阻碍了我们。
知道如何加快速度吗?用户抱怨响应缓慢。显然不是数据库,因为 SQL 查询本身非常快。好像跟EF有点关系,不过不知道是什么。
我在上面运行了 SQL Profiler,并且可以看到发送的 SQL。在 SSMS 中运行不到一秒,但分析器显示批次开始和结束之间有 10 秒的间隔。不确定这里发生了什么,因为我原以为 EF 会提取所有数据,然后将其具体化为实体,但看起来它可能正在这样做。
无论如何,如果我有任何关于如何提高性能的想法,我将不胜感激。
【问题讨论】:
-
单独创建上下文并重试。创建上下文需要时间
-
试过了,没有任何区别。即使使用现有上下文,查询也需要很长时间。还有其他想法吗?谢谢
-
运行分析器(例如 DotTrace,30 天免费),看看瓶颈在哪里。
-
当您声明“如果我在 SQL Server Management Studio 中运行以下查询,大约需要 1-2 秒才能完成...” - 是结果开始进入您的结果窗格- 或 - 完成查询(接收所有记录,提供记录计数,并停止查询计时器)?
-
@Mike,返回所有结果,提供记录计数并停止查询计时器。
标签: sql-server performance entity-framework