我有以下代码:
if (!this.writeDataStore.Exists(mat))
{
BlockingCollection<ImageFile> imageFiles = new BlockingCollection<ImageFile>();
Parallel.ForEach(fileGrouping, fi => DecompressAndReadGzFile(fi, imageFiles));
this.PushIntoDb(mat, imageFiles.ToList());
}
DecompressAndReadGzFile
是同一类中包含该方法的静态方法。根据方法名称,我正在解压缩和读取gz文件,很多文件,即多达1000个,因此并行化的开销是值得的。然而,我没有看到好处。当我使用ANTS性能分析器时,我发现它们运行的时间与未进行并行化时完全相同。我还使用进程资源管理器检查CPU核心,看起来可能在两个核心上处理工作,但一个核心似乎在大部分工作。我在使用Parallel.ForEach进行文件解压缩和读取时有何误解?
更新的问题:从文件列表中读取信息的最快方法是什么?
问题(简化):
- 有一个大的.gz文件列表(1200)。
- 每个文件都有一个包含“DATA:”的行,位置和行号不是静态的,可以从文件到文件不同。
- 我们需要检索“DATA:”后面的第一个数字(仅为简单起见),并将其存储在内存中的对象中(例如List)。
在最初的问题中,我使用了Parallel.ForEach循环,但似乎只有一个核心被占用。
DecompressAndReadGzFile
函数中是否进行了同步操作? - SimonC