我有一个 MVC Asp.Net 网站。我选择对整个站点使用单个全局连接,但我开始出现“已经为此连接打开了一个 DataReader”错误。所以我选择更改为在每个命令上实例化一个新的 MySQL 连接:
<---------------- With Global Connection ------------>
Public Function Con() As MySqlConnection
Static _con As MySqlConnection = Nothing
If _con Is Nothing Then
_con = New MySqlConnection(ConnectionString)
_con.Open()
End If
Return _con
End Function
Public Function ECN(Query As String) As Integer
Dim c As New MySqlCommand(Query, Con)
c.CommandText = Query
c.ExecuteNonQuery()
Return CInt(c.LastInsertedId)
End Function
.
<--------------- With A New Connection For Each Command ----->
Public Function ECN(Query As String) As Integer
Using Con As New MySqlConnection(ConnectionString)
Con.Open()
Dim c As New MySqlCommand(Query, Con)
c.CommandText = Query
c.ExecuteNonQuery()
Return CInt(c.LastInsertedId)
End Using
End Function
文档说性能是相同的,因为连接器使用连接池,但是当我进行基准测试时,差异非常大!
简单的命令:
ECN("insert into teste(nome) values('jackson')")
...在我的本地机器上执行大约需要 50 毫秒,但是当使用全局连接时,执行需要 0(零)毫秒!0毫秒!!!
所以,我做错了什么,或者这种性能差异是真实的,我必须选择?
我在整个站点中调用的唯一方法是 ECN 和 DS:
Public Function DA(Query As String) As MySqlDataAdapter
Return New MySqlDataAdapter(Query, Con)
End Function
Public Function DS(Query As String) As DataSet
Using a As MySqlDataAdapter = DA(Query)
Dim d As New DataSet
a.Fill(d)
Return d
End Using
End Function