gpt4 book ai didi

mysql - Asp.Net MySQL Connector/Net 连接池性能非常低

转载 作者:行者123 更新时间:2023-11-29 23:05:00 31 4
gpt4 key购买 nike

我有一个 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

最佳答案

MySql 连接器和连接池存在一些性能问题。连接器通过打开池中的连接来与服务器进行两次往返。

  1. 连接器发送 ping request .
  2. 之后,连接器发送 change the database请求。

当然,这种行为会对已打开的连接的性能产生负面影响。在我看来,这些请求是不必要的,您可以使用自己的修补连接器。

关于mysql - Asp.Net MySQL Connector/Net 连接池性能非常低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28328317/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com