c# – 对多个文件副本使用多线程
作者:互联网
我要复制大量文件(10000个文件)
因为复制需要很长时间.
我尝试使用两个线程而不是单个线程,一个用于复制列表中的奇数文件,另一个用于复制列表中的偶数
我用过这段代码:
ThreadPool.QueueUserWorkItem(new WaitCallback(this.RunFileCopy),object)
但是在使用单线程和使用两个线程时,时间上没有显着差异.
这可能是什么原因?
解决方法:
文件复制不是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);
更多实施细节
How to: Compress and Extract Files
标签:c,io,multithreading,parallel-processing,file-copying 来源: https://codeday.me/bug/20190528/1172429.html