Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
.net SqlDataReader性能低下_.net_Sql Server_Sql Server 2005_Sqldatareader - Fatal编程技术网

.net SqlDataReader性能低下

.net SqlDataReader性能低下,.net,sql-server,sql-server-2005,sqldatareader,.net,Sql Server,Sql Server 2005,Sqldatareader,我在MSSM中执行了约2秒的查询(返回25K行) 在.NET(sqlReader)中使用相同的查询,只需几分钟 我还尝试只执行reader (注释了while循环中的所有代码,只是离开了reader.Read())-还是一样 知道怎么回事吗 我不是DBA,也无权使用Profiler-我将询问我的DBA并让所有人都知道 同时,我注意到在我所说的SP中添加“WITH RECOMPILE”参数后,性能有了本质的提升 所以,从我的角度来看,执行计划似乎是如此。。。 你觉得怎么样 [编辑] 另外,我检查

我在MSSM中执行了约2秒的查询(返回25K行)

在.NET(sqlReader)中使用相同的查询,只需几分钟

我还尝试只执行reader

(注释了while循环中的所有代码,只是离开了reader.Read())-还是一样

知道怎么回事吗


我不是DBA,也无权使用Profiler-我将询问我的DBA并让所有人都知道

同时,我注意到在我所说的SP中添加“WITH RECOMPILE”参数后,性能有了本质的提升

所以,从我的角度来看,执行计划似乎是如此。。。 你觉得怎么样

[编辑] 另外,我检查的是从QA和.NET执行下面的查询

select @@options
我的理解是,它将为两种环境返回相同的值。 (如果没有差异,将使用ex.plans) 我说得对吗

[EDIT2] 我(从)读到,ARITHABOIRT=在QA中是开的(在.NET中是关的)


每个人都知道如何为每个.NET连接强制启用ARITHABOIRT=吗?

我会检查实际检索需要多长时间

例如:

  Private Sub timeCheck()
    'NOTE: Assuming you have a sqlconnection object named conn

    'Create stopwatch
    Dim sw As New System.Diagnostics.Stopwatch

    'Setup query
    Dim com As New SqlClient.SqlCommand("QUERY GOES HERE", conn)

    sw.Start()

    'Run query
    Dim dr As SqlClient.SqlDataReader = com.ExecuteReader()

    sw.Stop()

    'Check the time
    Dim sql_query_time As String = CStr((sw.ElapsedMilliseconds / 1000)) & " seconds"
  End Sub

这将允许您查看挂起是在检索中,还是在读卡器的执行中。

如果在循环中执行读卡器,读卡器执行多次,请确保使用CommandBehavior.CloseConnection

    SqlCommand cmd = new SqlCommand();
    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
如果不这样做,每次循环处理该行时,当它完成并且rdr和连接对象退出作用域时,连接对象将不会显式关闭,因此只有在垃圾收集器最终完成它时,它才会被关闭并释放回池中

然后,如果您的循环足够快(很可能),您将耗尽连接。(池有其可以生成的最大限制)


这将导致额外的延迟和延迟,因为代码不断创建额外的不必要的连接(达到最大值),并等待GC“赶上”正在使用它们的循环

我将在SQL Server Profiler中设置一个跟踪,以查看从.NET代码连接时连接使用的设置选项设置,以及SSMS中使用的设置。我指的是设置选项设置

ARITHABORT
ANSI_NULLS
CONCAT_NULL_YIELDS_NULL
//etc
请查看选项表


我以前见过一个问题,选项不同(在这种情况下,
ARITHABORT
),性能差异很大。

此外,查询分析器不下载大文本或大二进制字段的完整内容。您的SqlDataReader可能需要更长的时间,因为它确实下载了完整的内容。

我遇到了这个问题。勾选DB服务器连接设置中的“算术中止”设置。

Sql查询探查器是否显示有关此问题的任何提示?EJB:代码不适用于发布。问题是相同的,即使我们使用纯执行读取器命令(可在MS帮助中获得)Matt Murrell:我不是DBA,也不太了解探查器。你能告诉我在哪里/如何检查这些提示吗?最初的问题只提到运行一个需要花费时间的查询,而没有提到创建大量SqlConnection对象和执行大量查询。杜德,最初的查询提到了一个循环。。。这个网站上的人到底怎么了?你的职责不是识别别人回答中的每一个小细节。除非有人说错了什么,请把你的评论保持在积极的状态。我认为西蒙的意思是,如果建议的答案与原来的问题有关,那就好了。他是对的,最初的问题与连接无关,它与在.Read()循环中执行的代码有关,这意味着只有一个连接。所以从技术上讲,你确实说错话了,因为你回答了一个没有被问到的问题。哦,你是对的。。。我想我在他的评论中遗漏了这一点。在您的案例中,帮助检查或取消选中此选项?您想这样打开它,
MyCommand.CommnadText=“SET ARITHABORT on;”+MyCommand.CommnadText