更新数据表的最快方式
本文关键字:方式 数据表 更新 | 更新日期: 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);
});
编辑:这在一般情况下是行不通的(即使在不同的行上写操作也可能影响数据表的全局状态,所以我建议您使用自己的结构,如果性能是关键的,如果您不需要数据表的特定功能)