在我的代码中,它将SQL Server中存储过程的数据流式传输到.csv
文件中,我有这个:
...
using(SqlDataReader reader = cmd.ExecuteReader())
{
...
}
代码运行得很慢。
我摆脱了以下的using指令:
...
SqlDataReader reader = cmd.ExecuteReader()
...
现在它运行得更快。这种性能差异的原因是什么?
代码在存储过程中触发一个相对简单的SQL脚本,该脚本返回2百万行数据,这些数据为3列宽。
答案 0 :(得分:7)
可能是第二次运行它时,数据库已经将数据缓存在内存中。
答案 1 :(得分:2)
使用关闭并处理读卡器,这就是为什么它有点慢(几毫秒)。 如果垃圾收集器在代码执行时启动,则会产生影响。
但是没有理由省略这个。 在对代码进行概要分析时,您会发现,由于使用原因,不会对性能产生重大影响。
感谢Mike Cheel:
&#34; Close方法填充输出参数,返回值和RecordsAffected的值,从而增加了关闭用于处理大型或复杂查询的SqlDataReader所需的时间。当返回值和受查询影响的记录数不重要时,可以通过在调用Close方法之前调用关联的SqlCommand对象的Cancel方法来减少关闭SqlDataReader所需的时间。&#34; < / p>
https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.close(v=vs.110).aspx
所以我的解释是,当有一个像200万行的大查询时,它会对性能产生影响。
修改强>:
所以当我认为它只花费几毫秒时,我错了,似乎使用definetly会对这些大型查询的整体性能产生更大的影响。