为什么TableAdapter.Fill数据源之间的性能差异

时间:2015-02-06 04:08:17

标签: mysql .net vb.net visual-studio tableadapter

我有一个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.myTablemyDataSet.myStoredProc相同,除非它是通过连接DataSet设计器中的表创建的。显然myDataSet.myStoredProc与源数据库中的存储过程中的查询相同。

因此,使用Fill对每个方法对Stopwatch进行基准测试时,我得到以下结果:

  • myDataSet.myStoredProc
    〜750ms之间的

  • myDataSet.myTable
    〜550ms

  • getDataWithMySQL()
    < 10ms的

所以我的问题是,导致性能差异的原因是什么?我更喜欢使用myDataSet.myTablemyDataSet.myStoredProc,但我不知道是否可以通过某种方式优化它们以匹配getDataWithMySQL()的效果。

0 个答案:

没有答案