存储过程需要很长时间才能在控制器中返回,而在查询分析器中没有

本文关键字:返回 查询 分析器 控制器 长时间 存储过程 | 更新日期: 2023-09-27 18:02:07

我有一个存储过程,我在我的ASP中运行。Net MVC 4应用程序。该过程对记录进行大量处理,并将记录打包成一个漂亮的结果集。当我在*查询分析*程序中运行这个程序时,它在0秒内返回数据。然而,当我在调试器中运行以下代码时,需要8-10秒才能返回

EvalStatus = db.Database.SqlQuery<EvaluationStatus>(
"exec [pro].sp_PROLeaderResultsGrid @schoolID, @leaderID, @blnAdmin",
 new SqlParameter("schoolID", leader.SchoolID),
 new SqlParameter("leaderID", leader.ID),
 new SqlParameter("blnAdmin", LeaderViewModel.IsAdmin)).ToList();
LeaderViewModel.EvaluationStatus = EvalStatus;

EvaluationStatus只是一堆字符串和整数,按照这个过程的结果集的顺序排列。

public class EvaluationStatus : IEvaluationStatus
{
    public string TeacherID { get; set; }
    public string TeacherName { get; set; }
    public string TeacherStatus { get; set; }
    public string Actions { get; set; }
    public string ProLeaderStatus { get; set; }
    public string ProLeaderID { get; set; }
    public string ProLeaderName { get; set; }
    public string FinalLeaderName { get; set; }
    public string FinalLeaderStatus { get; set; }
    public string FinalTeacherStatus { get; set; }
    public string MenuActions { get; set; }
    public int LeaderKey { get; set; }
}

是否有什么明显的,我错过了,会导致这段代码需要8-10秒时,从网站运行?

其他一些信息。我使用实体框架为我的大部分应用程序,除了这个调用。我还没有将这个存储过程添加到.edmx。

存储过程需要很长时间才能在控制器中返回,而在查询分析器中没有

你应该尝试在你的进程中添加"SET NOCOUNT ON"子句,这样,进程就不会向ADO发送信号。当T-SQL语句在进程内执行时,可能会修复这个问题。

如果它仍然很慢,您可以将此进程切换到标准ADO。Net进程调用,并将SqlConnection PacketSize属性设置为3000到8000之间的值。http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.packetsize.aspx

另外,请记住调试器的执行时间无论如何都不是一个好的度量,因为调试器本身使事情变慢(有时很慢)。在发布模式和时间度量逻辑下运行相同的代码(使用TimeSpans或其他),以了解实际的执行时间。