Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将语句与ExecuteReader()一起使用似乎会导致性能下降_C#_Sql Server_Performance - Fatal编程技术网

C# 将语句与ExecuteReader()一起使用似乎会导致性能下降

C# 将语句与ExecuteReader()一起使用似乎会导致性能下降,c#,sql-server,performance,C#,Sql Server,Performance,在我的代码中,将数据从SQL Server中的存储过程流式传输到.csv文件中,我有以下内容: ... using(SqlDataReader reader = cmd.ExecuteReader()) { ... } 代码运行得非常慢 我删除了针对以下内容的using指令: ... SqlDataReader reader = cmd.ExecuteReader() ... 现在它运行得快多了。这种性能差异的原因是什么 代码在一个存储过程中触发了一个相对简单的SQL脚本,该过程返回

在我的代码中,将数据从SQL Server中的存储过程流式传输到
.csv
文件中,我有以下内容:

...
using(SqlDataReader reader = cmd.ExecuteReader())
{
    ...
}
代码运行得非常慢

我删除了针对以下内容的using指令:

...
SqlDataReader reader = cmd.ExecuteReader()
...
现在它运行得快多了。这种性能差异的原因是什么


代码在一个存储过程中触发了一个相对简单的SQL脚本,该过程返回200万行3列宽的数据。

可能是第二次运行时,数据库已经将数据缓存在内存中

使用的会关闭并处理读卡器,这就是它速度稍慢(几毫秒)的原因。 如果垃圾收集器在代码执行时启动,则会产生影响

但是没有理由省略这个用法。 在分析代码时,您将认识到,使用脚本不会对性能造成太大影响

感谢:

Close方法填充输出参数、返回值和RecordsAffected的值,增加了关闭用于处理大型或复杂查询的SqlDataReader所需的时间。当返回值和受查询影响的记录数不显著时,可以通过在调用close方法之前调用关联的SqlCommand对象的Cancel方法来减少关闭SqlDataReader所需的时间。”

因此,我的解释是,当有像200万行这样的大型查询时,它会对性能产生影响

编辑


因此,当我认为这只需要几毫秒的时间时,我错了。在这样大的查询中,似乎使用肯定会对整体性能产生更大的影响。

using语句不同于using语句directive@whytheq您的问题描述了using语句。using指令是导入名称空间的指令(即
使用System.Linq;
)是的,不应该有任何显著的差异。你能分析一下差异吗?我不相信人们在性能方面的直觉。请尝试分析SQL,检查逻辑读取和物理读取。如果物理读取较低,可能意味着数据已经缓存在内存中,这可能会在第二天发生请告诉我您运行了一个查询。我不认为“非常慢”和“非常快”之间的差异对于任何有理智的人来说都是以毫秒为单位来衡量的。如果您这样做了1000次,它就会发生变化。另外,如果gc启动,它肯定会产生影响。但是仍然没有理由忽略usingAlso,您应该调用Dispose()无论如何手动…@Guilherme为什么要这样做?这正是
使用
-语句所做的,不需要调用
Dispose
self.@HimBromBeere我的意思是当不使用
使用
时。把它留给GC来处理是不好的。