假设我们有一个包含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上的单元格时,它根本不需要时间。
答案 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的具体功能)