SqlDataReader GetValue占用了大量时间

时间:2016-09-15 13:32:25

标签: c# sql-server

我有一个MSSQL查询。如果我在SSMS中运行它 - 它会及时返回结果集(低于10秒) - 1012行。

在C#中,使用SqlDataReader,大约每7或8行,在调用GetValue时,大约需要8秒。对于同一个字段并不总是这样(结果集总共有48个字段)。但是,它可以是String或Guid字段。

我有其他查询以相同的方式运行(包括很多字段,包括String和Guid),返回3000多行,绝对没问题。有问题的查询在100多个其他服务器上运行没有问题。

导致这种情况的原因是什么?

下面是代码的简化版本,但它仍然以相同的方式运行。秒表不在生产代码中,我只是将其添加进行测试。

if ( aReader != null && !aReader.IsClosed && aReader.HasRows )
{
   while( aReader.Read())
   {
      for ( int iFieldIndex = 0; iFieldIndex < aReader.FieldCount; iFieldIndex++ )
      {
         Stopwatch s = Stopwatch.StartNew();
         object test = aReader.GetValue( iFieldIndex );
         s.Stop();
         // Every other 7 or 8 rows, s.ElapsedMilliseconds is >= 8000.
      }
   }
}

我在读取块中没有异常处理。读者和命令得到妥善处理。正如我已经提到的 - 使用相同的SQL查询,相同的代码在100多个其他服务器上正常工作。这只发生在一台机器上。

0 个答案:

没有答案