У меня есть веб-сайт MVC Asp.Net. Я решил использовать одно глобальное соединение со всем сайтом, но у меня появляется ошибка «Есть уже ошибка DataReader для этого соединения». Поэтому я решил изменить для создания нового соединения MySQL по каждой команде:Asp.Net MySQL Connector/Net Connection Pool с очень низкой производительностью
<---------------- 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 мс на моей локальной машине, но при использовании Global Connection он принимает 0 (ноль) мс для выполнения! 0ms !!!
Итак, я делаю что-то не так, или это различие в производительности реально, и я должен выбрать?
Единственные методы, которые я называю в целом сайт 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
Вы использовали 'ExecuteReader' где-нибудь еще в приложении? –
Нет. Никогда не использовал ExecuteReader. Может быть, Connector/Net называет его любым из своих методов? Единственными методами, которые я называю, являются ECN и DS *. Я обновил исходное сообщение, включая метод DS. –