使用多线程处理多个文件副本

til*_*nge 4 c# io parallel-processing multithreading file-copying

我要复制大量文件(10000个文件)

因为复制需要很长时间.我尝试使用两个线程而不是单个线程,一个用于复制列表中的奇数文件,另一个用于复制列表中的偶数

我用过这段代码:

ThreadPool.QueueUserWorkItem(new WaitCallback(this.RunFileCopy),object)
Run Code Online (Sandbox Code Playgroud)

但是在使用单线程和使用两个线程时,时间上没有显着差异.

这可能是什么原因?

acc*_*ews 7

文件复制不是CPU进程,而是IO进程,因此多线程或并行性不会对您有所帮助.

在几乎所有情况下,多线程都会降低你的速度.如果光盘也是SSD,它的r/w速度有限,它也可以用单线程有效地使用它.如果您使用并行性,您只需将速度分成几部分,这将为HDD带来巨大的开销

当您从不同的光盘读取并写入不同的光盘时,多线程只能帮助您处理多个光盘盒.

如果文件太小.在大多数情况下,压缩和解压缩目标驱动器上的文件可能会更快,如果你用低压缩文件压缩文件,它会更快

using System.IO;
using System.IO.Compression;

.....

string startPath = @"c:\example\start";
string zipPath = @"c:\example\result.zip";
string extractPath = @"c:\example\extract";

ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest, true);

ZipFile.ExtractToDirectory(zipPath, extractPath);
Run Code Online (Sandbox Code Playgroud)

更多实施细节

如何:压缩和提取文件