我有一个Windows表单应用,DataGridView
填充了TableAdapter
。我正在使用Fill
方法在循环Async
子句中更新UI的数据,如此。
Private Async Sub updateUI()
Dim sw As New Stopwatch
While True
Await Task.Delay(3000)
sw.Restart()
'myTableAdapter.Fill(getDataWithMySQL())
'myTableAdapter.Fill(myDataSet.myTable)
myTableAdapter.Fill(myDataSet.myStoredProc)
logger.Debug(sw.ElapsedMilliseconds)
End While
End Sub
getDataWithMySQL
功能如下:
Private Function getDataWithMySQL() As myDataSet.myDataTable
Dim connStr As String = My.Settings.myConnectionString
Dim sql As String = "SELECT ... LEFT JOIN ..."
Dim dt As New myDataSet.myDataTable
Using conn As New MySqlConnection(connStr)
Using cmd As New MySqlCommand()
With cmd
.CommandText = sql
.Connection = conn
End With
Try
conn.Open()
Dim sqladapter As New MySqlDataAdapter(cmd)
sqladapter.Fill(dt)
Catch ex As MySqlException
MsgBox(ex.Message)
End Try
End Using
End Using
Return dt
End Function
myDataSet.myTable
与myDataSet.myStoredProc
相同,除非它是通过连接DataSet设计器中的表创建的。显然myDataSet.myStoredProc
与源数据库中的存储过程中的查询相同。
因此,使用Fill
对每个方法对Stopwatch
进行基准测试时,我得到以下结果:
myDataSet.myStoredProc
〜750ms之间的
myDataSet.myTable
〜550ms
getDataWithMySQL()
< 10ms的
所以我的问题是,导致性能差异的原因是什么?我更喜欢使用myDataSet.myTable
或myDataSet.myStoredProc
,但我不知道是否可以通过某种方式优化它们以匹配getDataWithMySQL()
的效果。