我使用此代码:
Dim connection As SqlConnection
Dim connetionString As String
Dim sqlq As String = "select c.* from(..."
connetionString = "Data Source=...;Initial Catalog=...;User ID=...;Password=..."
connection = New SqlConnection(connetionString)
track3.Text = "Connection... " & DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")
Using connection
connection.Open()
track4.Text = "SqlCommand... " & DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")
Dim command As SqlCommand = New SqlCommand(sqlq, connection)
track5.Text = "SqlDataReader... " & DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")
Dim reader As SqlDataReader = command.ExecuteReader()
track6.Text = "Filling RTB... " & DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")
If reader.HasRows Then
........
Do While reader.Read()
.......
reader.Close()
End Using
track7.Text = "Done " & DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")
我注意到命令'command.ExecuteReader()'消耗大部分时间。这个时间范围有时在1到19秒之间,这对我来说太长了。有没有更好的方法来做我做的事情?我需要从数据库中读取一些数据并在富文本框中显示它(不是从DB接收的所有内容)。
答案 0 :(得分:4)
ExecuteReader
有各种各样的表现部分:
ExecuteReader
启动获取数据所需的时间)While
循环的迭代次数)While
循环内的代码)从你的描述中,听起来首先是问题。这与ADO.NET有绝对没有,而所有与您的查询有关。所以:写一个更好的查询,或添加适当的索引。
可能影响此事的其他因素:
SET
配置(ADO.NET与SSMS窗口的默认值不同SET
,因此在某些情况下性能会有很大差异)OPTIMIZE FOR
查询提示可以提供帮助,如果您已确认参数嗅探是个问题。答案 1 :(得分:2)
如果ExecuteReader()
是您的性能瓶颈,那么您需要编写更好的SQL查询,更好地组织数据库中的数据(例如设置索引),并通常优化数据库上的内容。
你不能在客户端做很多事情因为ExecuteReader()
基本上只是将查询发送到数据库并等待结果到达。