SqlDataReader性能下降

Mac*_*iej 11 .net sql-server sql-server-2005 sqldatareader

我在MSSMS中查询执行~2秒(返回25K行)

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

我也尝试过只执行读者

(评论while循环中的所有代码只是离开reader.Read()) - 仍然相同!

知道怎么了?


我不是DBA,也没有特权与Profiler一起玩 - 会问我的DBA,让大家都知道.

与此同时,我注意到在我正在谈论的SP中添加" WITH RECOMPILE "参数后,必不可少的性能提升

所以,从我的角度来看,执行计划似乎就是这样......你怎么看?

[编辑] 我所检查的是从QA和.NET执行以下查询

select @@options
Run Code Online (Sandbox Code Playgroud)

我的理解是它将为两个环境返回相同的值.(如果没有使用不同的ex.plans)我是对的吗?

[EDIT2] 我已经阅读(来自http://www.sqldev.net/misc/fn_setopts.htm)在QA 中ARITHABOIRT = ON(在.NET中它关闭)

enybody是否知道如何为每个.NET连接强制ARITHABOIRT = ON?

Rus*_*Cam 5

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

ARITHABORT
ANSI_NULLS
CONCAT_NULL_YIELDS_NULL
//etc
Run Code Online (Sandbox Code Playgroud)

查看MSDN以获取选项表

我之前看到的问题是选项不同(在这种情况下ARITHABORT),性能差异很大.


Duc*_*ain 0

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

例如:

  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
Run Code Online (Sandbox Code Playgroud)

这将使您能够了解阻碍是在检索中还是在读取器的执行中。