我想提高更新DataTable
行的性能。在一个示例中,我需要在DateTime
列上操作,将System.DateTime
值转换为本地包装类。这意味着,我现在循环遍历Rows
集合,并将每行的每一列设置为串联。
我现在所做的一个例子:
dt.Columns.Add(new DataColumn("fldDateCreated", typeof(TypedDateTime)));
foreach (DataRow row in dt.Rows)
{
if (!(row["~fldDateCreated"] is DBNull))
row["fldDateCreated"] = new TypedDateTime((DateTime)row["~fldDateCreated"]);
}
dt.Columns.Remove("~fldDateCreated");
我希望能够并行执行此操作,但as MSDN says并且我的测试证明,DataTable
不喜欢这类事情。
他们声明(DataTable
和DataRow
):
此类型对于多线程读取操作是安全的。你必须 同步任何写操作。
我尝试了将行数据捕获到Object[]
,并行更新,然后从这些结果更新DataTable
等替代方法。但是,查找和更新每一行的价格似乎远远高于原始循环。
这里有前进的方向吗?我可以用某种线程/并行方式处理这些行更新吗?
答案 0 :(得分:0)
你去,
// referencing
// System.Data.DataSetExtensions
// System.Linq.Parallel
dt.AsEnumerable().AsParalell()
.Where(row => !(row["~fldDateCreated"] is DBNull))
.ForAll(row =>
{
row.SetField(
"fldDateCreated",
new TypedDateTime((DateTime)row["~fldDateCreated"]));
});