更新数据表的最快方式

本文关键字:方式 数据表 更新 | 更新日期: 2023-09-27 18:03:57

假设我们有一个100列100行的DataTable。我们有一个包含100个成员的值的字典:

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

在上面的dictionary中,key是Datatable的索引,value是Datatable中要更新的目标值

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

      foreach (var pair    in dictionary)
        {
            timeTable.Rows[pair.Key].SetField(columnIndex, pair.Value);
        }

假设我们必须更新40列的所有行,它的性能不太好。我在想,数据表就像一个矩阵,它不应该花时间,当你想要更新矩阵单元格,而你有行和列的索引。

更新数据表的最快方式

DataTable是一个非常昂贵的结构,它在幕后做了很多事情(特别是因为它们被设计成可以处理任何事情)。

如果性能很重要,请考虑:

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

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

// Probably not thread safe, after the MSDN documentation
Parallel.ForEach(Dictionary, pair =>
    {
      timeTable.Rows[pair.Key].SetField(columnIndex, pair.Value);
    });

编辑:这在一般情况下是行不通的(即使在不同的行上写操作也可能影响数据表的全局状态,所以我建议您使用自己的结构,如果性能是关键的,如果您不需要数据表的特定功能)