使用LINQ改进多个CSV数据的合并

时间:2015-03-09 01:35:58

标签: c# performance linq

我有四个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吗?

1 个答案:

答案 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;