0

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
4

1 に答える 1