并行文件是否比顺序读取更快?

Gra*_*ton 6 c# file-io

我只是想知道并行File.Read使用PLINQ/Parallel可以更快吗?我的代码如下(.Net 4.0):

public static void ReadFileParallel(List<string> fileName)
{
   Parallel.Foreach(fileName, file=>File.Read(file));
}

public static void ReadFilePLINQ(List<string> fileName)
{
    fileName.AsParallel().foreach(file=>File.Read(file));
}
Run Code Online (Sandbox Code Playgroud)

我问这个的原因是因为我认为文件读取是IO绑定的,所以做并行不会有帮助,我是对的吗?

Dav*_*kle 6

这取决于.

如果您的文件位于不同的位置,不同的网络共享或不同的物理硬盘驱动器上,那么是的,并行加载可能会有所帮助.如果它们位于单个旋转硬盘驱动器上,并行读取文件可能会显着损害您的性能,因为这些并行读取可能会产生额外的搜索时间.

如果您的文件位于SSD上,您的性能可能略低,但这取决于您并行读取的文件数量以及它们的大小.我想,在某个文件大小阈值和并行读取数量下,性能将显着下降.没有一些实验,很难说出那个.

  • 这些都是合理的标准。但在实践中,我会说测量而不是猜测。 (2认同)