我正在使用此代码获取数据:
Dim connetionString As String
Dim connection As SqlConnection
Dim sqlq As String
sqlq = "select top 1 * from table1 where smth"
Dim ds As New DataSet
connetionString = "Data Source=db;Initial Catalog=ic;User ID=id;Password=pass"
connection = New SqlConnection(connetionString)
Try
Using connection
Dim command As SqlCommand = New SqlCommand(sqlq, connection)
connection.Open()
Dim reader As SqlDataReader = command.ExecuteReader()
If reader.HasRows Then
Do While reader.Read()
x = reader.GetString(5)
Loop
End If
reader.Close()
End Using
Catch ex As Exception
End Try
这种类型的连接(使用不同的sqlq [查询])我在不同的函数中使用了很多,每次我关闭连接。我想优化它,以便获取数据所需的时间更少。我该怎么做?
答案 0 :(得分:5)
最佳做法是在完成连接后立即处理/关闭连接。实际上connection-pool不会关闭底层物理连接,只会将此连接标记为可重用,如果它已关闭。因此,如果您不关闭连接,则无法重复使用,因此池需要创建一个非常昂贵的新物理连接。
所以只有一些小改进:
Const sql = "select top 1 * from table1 where smth"
Dim table As New DataTable()
Using con = New SqlConnection("Data Source=db;Init ....")
Using command = New SqlCommand(sql, con)
Using da= New SqlDataAdapter(command)
da.Fill(table)
End Using
End Using
End Using
您应该将Using
用于实现IDisposable
的任何对象。您不应该使用空的Catch
块。
答案 1 :(得分:3)
默认情况下,只要连接字符串相同,就会从同一个连接池中获取连接。
短连接池保持不需要的连接打开,并在下一个请求中返回该连接,因此您无需考虑打开连接所需的时间。
保持连接打开时间超过您的需要是个坏主意,因为它会耗费资源,而且通常一些服务器可以接受有限的连接。