【问题标题】:Disparity between SqlReader execution times on same .NET project but different computers同一 .NET 项目但不同计算机上的 SqlReader 执行时间之间的差异
【发布时间】:2012-05-16 14:40:51
【问题描述】:

我正在处理一个从 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 上的执行时间大致相同,并且上面的代码 sn-p 可以完美执行。但是,在我运行 Windows 7 x64 的计算机上,上面的代码在 0:40 标记处的 EndExecuteReader 行遇到错误。返回的错误是“无效操作。连接已关闭。”

添加cmdData.CommandTimeout = 600 允许继续执行,但返回数据需要超过 4 分钟,我们无法解释可能发生的情况。

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

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

【问题讨论】:

  • 你能提供你得到的确切错误信息吗?
  • @pdriegen 是的,我意识到我在重新阅读后忘记添加了。它现在在那里,我收到“无效操作。连接已关闭。”
  • 您在同一台机器上是否有 Sql Server 和应用程序并从第二台机器远程访问数据库。
  • @Romil 都在访问远程 SQL 服务器
  • 我有一些模糊的东西similar... 你是否进入 SSMS,右键单击服务器名称,选择属性,然后在“处理器”下单击相应的框?

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


【解决方案1】:

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

【讨论】:

  • 但是,在完全相同的项目中,一台计算机可以正常运行代码,而另一台计算机则不能,但可以通过更改 CommandTimeout 来修复?
  • 鉴于相同的代码在一个环境中成功运行,但在另一个环境中却没有,编码错误似乎不太可能。
猜你喜欢
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
  • 2017-07-13
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多