为什么在SqlDataReader上迭代超过60,000条记录会变慢?

时间:2013-11-13 21:52:14

标签: c# sql ado.net sqldatareader

我正在进行应用程序优化,我已经优化了我的查询,从17秒以上只需5毫秒(总执行时间= ~350毫秒)。但迭代 60k 记录的SQLDataReader记录大约需要 900 ms 。有什么方法可以减少900毫秒的时间吗?

以下是我使用的示例代码......

SqlConnection conn = new SqlConnection("data source=XXX;initial catalog=XXX;integrated security=True");
conn.Open();
SqlCommand cmd = new SqlCommand("uspOptimizedSP", conn);
cmd.CommandType = CommandType.StoredProcedure;
var reader = cmd.ExecuteReader();

int i = 0;
Stopwatch sw = new Stopwatch();
sw.Start();
while (reader.Read())
{
++i;

}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds); // This results in ~900 ms

经过的毫秒是 800ms到950ms

其他详情

  • 60k记录的数据集大小= 714 MB。
  • 我使用了AutoMapper,但将数据从IDataReader转换为POCO类需要3秒多时间

1 个答案:

答案 0 :(得分:1)

Datareader读取数据就好像它是一个流一样,在执行查询可用时从数据库中检索行。这可能就是为什么你需要时间来复制714 MB的数据。您无法将其与迭代内存集合进行比较。