我有四个CSV文件,每个文件有400k-880k行和几十列。一个是主文件,另外三个包含辅助数据。所有文件都包含时间戳,但未同步。由于采样率较高,三个辅助文件的行数是4倍。
对于主数据库中的每个数据行,我在这样的辅助文件中找到最近的适用时间戳,想要获取该时间的辅助数据并将其合并到主数据中:
var valueJustBeforeMasterTime = from row in dtAncillary.Rows
where masterTimeInTicks - DateTime.ParseExact(row["ANCIL_TIME"].Substring(row["ANCIL_TIME"].Length - 15),
"HH:mm:ss.ffffff", CultureInfo.InvariantCulture).Ticks <= 10e5 &&
masterTimeInTicks - DateTime.ParseExact(row["ANCIL_TIME"].Substring(rowFB["ANCIL_TIME"].Length - 15),
"HH:mm:ss.ffffff", CultureInfo.InvariantCulture).Ticks >= 0
select row.Values;
var beforeNow = valueJustBeforeMasterTime.Last();
这是一项昂贵的操作,需要很长时间,因为我需要为数据子集做600次这样的事情。我阅读了有关编译的LINQ查询以加快速度,但我不确定如何处理它。我应该为了这个特殊需要而离开LINQ吗?
答案 0 :(得分:0)
尝试PLINK.
var valueJustBeforeMasterTime = from row in dtAncillary.Rows.AsParallel()
where masterTimeInTicks - DateTime.ParseExact(row["ANCIL_TIME"].Substring(row["ANCIL_TIME"].Length - 15),
"HH:mm:ss.ffffff", CultureInfo.InvariantCulture).Ticks <= 10e5 &&
masterTimeInTicks - DateTime.ParseExact(row["ANCIL_TIME"].Substring(rowFB["ANCIL_TIME"].Length - 15),
"HH:mm:ss.ffffff", CultureInfo.InvariantCulture).Ticks >= 0
select row.Values;