更新数据表的最快方法

时间:2014-05-18 09:31:27

标签: c# performance datatable

假设我们有一个包含100列和100行的DataTable。 我们有一个像这样的值字典,其中包含100个成员:

Dictionary<int, string> dictionary = GetValues();

上面的字典键是Datatable的索引,字典的值是我们想要在Datatable中更新的目标值。

更新数据表的最快方法是什么?我用这种方式,但它很慢:

      foreach (var pair    in dictionary)
        {

            timeTable.Rows[pair.Key].SetField(columnIndex, pair.Value);
        }

假设我们必须更新40列的所有行,它没有良好的性能。我当时认为Datatable就像一个Matrix,当你想要在行和列的索引上更新Matrix上的单元格时,它根本不需要时间。

1 个答案:

答案 0 :(得分:1)

DataTable是一种非常昂贵的结构,在幕后花费很多(特别是因为它们可以处理任何事情)。

如果表现至关重要,请考虑:

  • 创建自己的结构,例如封装字符串数组数组的类(例如字符串矩阵,访问速度非常快)

  • 并行更新表(因为您永远不会访问同一行),因为知道DataTable对于编写操作不是线程安全的。

e.g。

// Probably not thread safe, after the MSDN documentation
Parallel.ForEach(Dictionary, pair =>
    {
      timeTable.Rows[pair.Key].SetField(columnIndex, pair.Value);
    });
编辑:这在一般情况下不起作用(即使在不同的行上写操作也可能影响DataTable的全局状态,所以如果性能很关键,如果你不需要,我建议你使用自己的结构DataTable的具体功能)