【发布时间】:2014-09-14 04:49:47
【问题描述】:
我在strFilePath 数组中有各种 csv 文件的位置(几乎 1000 个文件,每个文件中有 100 万条记录)。从文件中读取并将所有数据合并到单个数据表需要大量时间。所以我决定继续进行并行处理。
当前代码
DataTable dtMerge=new DataTable();
for(int i=0;i<strFilePath.Count;i++)
{
Parallel.For(0, 3,m =>
{
clsNewClass objCls=new clsNewClass();
DataTable dt=objCls.ReadCSV(strFilePath[m+i]);
});
m+=3;
}
问题是,如何将数据表 dt 中的所有数据合并到全局数据表 dtMerge 中,或者如何将所有结果包含到全局变量 dtMerge 中?
预期的工作代码
DataTable dtMerge=new DataTable();
for(int i=0;i<strFilePath.Count;i++)
{
Parallel.For(0, 3,m =>
{
clsNewClass objCls=new clsNewClass();
// Is it possible like the below?
dtMerge = objCls.ReadCSV(strFilePath[m+i]);
});
m+=3;
}
【问题讨论】:
-
现有代码中有不少错误。
m未在m+=3声明是第一个跳出来的。实际上你可能会更好Parallel.ForEach(strFilePath, filepath => { ... }) -
毕竟我将如何合并它?有什么办法不使用 Parallel.Foreach 中的 lock(object) 吗? @斯科特张伯伦
标签: c# datatable parallel-processing parallel.foreach parallel.for