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

本文关键字:SqlReader 执行时间 之间 计算机 项目 NET 同一 | 更新日期: 2023-09-27 18:34:34

我正在处理一个从 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 框架,针对 32 位程序集运行 64 位操作系统,可能将信息存储在未同步到 TFS 服务器的本地项目文件中。 但我们似乎无法弄清楚究竟是什么导致了时代的差距。

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

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

当为

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