调用数据访问应用程序块时非常奇怪的减速。
它调用的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秒!)来执行。
任何想法都会受到欢迎......
答案 0 :(得分:0)
您可以尝试运行SQL事件探查器,以查看使用DAAB运行时实际调用的内容。随着这一点,看看它正在使用的执行计划。
在过去,我编写了一些代码,这些代码在SQL查询中运行良好但作为存储过程非常慢。事实证明,查询优化器正在使用不同的SQL查询执行计划,然后是存储过程。获取索引后,两者都以相同的快速速度运行。