MVC Asp.Net Web サイトを持っています。サイト全体に対して単一のグローバル接続を使用することを選択しましたが、「この接続に対して 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 (ゼロ) ミリ秒かかります! 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