编程语言
首页 > 编程语言> > c# – 对多个文件副本使用多线程

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