【发布时间】:2016-10-26 18:57:15
【问题描述】:
我正在尝试追踪性能问题。我正在对 SQL Server Express 数据库运行以下 SQL 查询:
SELECT COUNT(OrderID)
FROM FutureOrderHeader
WHERE ScheduledFulfillmentTime >= {0}
AND ScheduledFulfillmentTime < {1}
AND SplitStatus <> 2
AND Deleted = 0
AND OrderMode = {2}
当我使用实体框架运行命令时,如下所示:
var results = ((DbContext)this._context).Database.SqlQuery<int>(SQL,start.BoxToSqlDataTime(),end.BoxToSqlDataTime(), (int)mode).Single();
如果我通过 ADO.NET 运行命令,它会慢大约 20 倍。使用 SQL Server Profiler 和 EF Profiler,我能够确定查询是相同的。大约通过 EF 执行此查询。 720次平均耗时2837ms。使用直接 ADO.NET 运行相同的查询平均需要 146 毫秒。
在 SQL Server Profiler 中,无论我使用的是 EF 还是 ADO.NET,实际执行的 SQL 文本以及持续时间、cpu 使用率、读取次数等都是相同的。根据 SQL Server Profiler,无论我使用的是 EF 还是直接 ADO.NET,查询本身都需要 0 毫秒到 2 毫秒。
我想知道这种性能下降是正常的还是我遗漏了什么。
谢谢!
【问题讨论】:
-
这大概是EF模型的启动时间。在相同的上下文中第二次执行时它仍然很慢吗?
-
在运行上述测试之前,我尝试通过运行其他一些查询来计算 EF 的启动时间。
标签: c# entity-framework