同一.NET项目上的SqlReader执行时间与不同计算机之间的差异

时间:2012-05-16 14:40:51

标签: c# asp.net sql-server ado.net

我正在开发一个从MSSQL服务器读取数据的团队项目。我们正在使用异步调用来获取数据。

SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
SqlCommand cmdData = new SqlCommand("get_report", conn);
cmdData.CommandType = CommandType.StoredProcedure;

conn.Open();
IAsyncResult asyResult = cmdData.BeginExecuteReader();

try
{
    SqlDataReader drResult = cmdData.EndExecuteReader(asyResult);
    table.Load(drResult);
}
catch (SqlException ex)
{
    throw;
}

项目本身使用带有门控签到的TFS源代码控制,我们已经验证两台计算机都运行完全相同的项目版本。我们也使用相同的用户登录并使用完全相同的参数执行存储过程(为简洁起见未列出)。

存储过程本身需要1:54才能在SQL Server Management Studio下返回42000行。在Windows 7 x86上运行时,.NET代码执行的时间与SSMS大致相同,上面的代码片段执行得非常完美。但是,在运行Windows 7 x64的计算机上,上面的代码在0:40标记的EndExecuteReader行遇到错误。返回的错误是"无效操作。连接已关闭。"

添加cmdData.CommandTimeout = 600允许继续执行,但数据需要4分钟才能返回,我们无法解释可能会发生什么。

我们考虑过的一些事情:我的计算机安装了.NET 4.5 Framework,针对32位程序集运行64位操作系统,可能将信息存储在未与TFS服务器同步的本地项目文件中。但我们似乎无法弄清楚究竟是什么原因造成了时间上的差异。

任何人都有任何想法,为什么存在这种差异,或者可以给我建议在哪里寻找隔离问题?

1 个答案:

答案 0 :(得分:0)

对于单个命令执行多次调用EndExecuteReader时收到无效操作错误,或者该方法与其执行方法不匹配。