为什么对DatabaseInstance.ExecuteSprocAccessor <t>(...)的调用需要这么长时间来进行这么简单的查询?</t>

时间:2012-10-31 15:08:04

标签: c# performance sql-server-2008-r2 daab data-access-app-block

调用数据访问应用程序块时非常奇怪的减速。

它调用的SP(“QuestionsToBeAnswered”)返回58行,包含三列(两个GUID和一个整数:21AF77DA-2E76-47DB-AB54-0E5C85CD9AD8,21AF77DA-2E76-47DB-AB54-0E5C85CD9AF0,2)直接在服务器上执行时为1秒。我的SQL经验非常好,我确信SQL服务器上不存在这个问题。

但是,当通过DAAB调用它时,返回对象集合需要很长时间。 ExecuteSprocAccessor(...)通常返回一个IEnumerable,并且在枚举或以其他方式消耗集合之前不执行SP,因此在消费发生之前不会出现此问题。

DatabaseInstance.ExecuteSprocAccessor<T>(storedProcedure, rowMapper, args);

鉴于相同的代码没有问题返回&gt; 200行相当复杂的信息,我感到困惑的是为什么这段代码花了这么长时间(55秒!)来执行。

任何想法都会受到欢迎......

1 个答案:

答案 0 :(得分:0)

您可以尝试运行SQL事件探查器,以查看使用DAAB运行时实际调用的内容。随着这一点,看看它正在使用的执行计划。

在过去,我编写了一些代码,这些代码在SQL查询中运行良好但作为存储过程非常慢。事实证明,查询优化器正在使用不同的SQL查询执行计划,然后是存储过程。获取索引后,两者都以相同的快速速度运行。