Datarow setter性能取决于数据表列数?

时间:2012-11-09 20:11:21

标签: .net performance dataset datarow

我们最近经历了具有大列数(~100-200)的数据表的性能显着降低。经过一些调试后,我认为滞后来自datarow的set item方法随着列数的增加而变慢得多。这是我们的基准测试,在循环中设置相同的行项目:

 Dim sw As New Stopwatch
        Dim cnt = 10 ^ 6 - 1

        Debug.Print("-- Row setter test for 10 column datatable --")

        Dim dt As New DataTable
        For i = 0 To 9
            dt.Columns.Add("Column" & i.ToString)
        Next
        Dim row As DataRow = dt.Rows.Add

        Dim col = dt.Columns(9)
        sw.Restart()
        For i = 0 To cnt
            row.Item(col) = 3.14
        Next
        sw.Stop()
        Debug.Print("RowSet time:  " & sw.Elapsed.TotalSeconds.ToString)


        Debug.Print("-- Row setter test for 100 column datatable --")

        dt = New DataTable
        For i = 0 To 99
            dt.Columns.Add("Column" & i.ToString)
        Next
        row = dt.Rows.Add

        col = dt.Columns(9)
        sw.Restart()
        For i = 0 To cnt
            row.Item(col) = 3.14
        Next
        sw.Stop()
        Debug.Print("RowSet time:  " & sw.Elapsed.TotalSeconds.ToString)

... 10列表输出0.95秒,100列表输出5.8秒 - 显着差异。使用其他重载集合方法的结果类似于 列名和列索引。

我不明白这些结果。对于总列数,数据行项目是否应该是O(1)操作?当然,数据表已经以某种方式索引其列集合了吗?

0 个答案:

没有答案