til*_*nge 4 c# io parallel-processing multithreading file-copying
我要复制大量文件(10000个文件)
因为复制需要很长时间.我尝试使用两个线程而不是单个线程,一个用于复制列表中的奇数文件,另一个用于复制列表中的偶数
我用过这段代码:
ThreadPool.QueueUserWorkItem(new WaitCallback(this.RunFileCopy),object)
Run Code Online (Sandbox Code Playgroud)
但是在使用单线程和使用两个线程时,时间上没有显着差异.
这可能是什么原因?
文件复制不是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)
更多实施细节
| 归档时间: |
|
| 查看次数: |
4026 次 |
| 最近记录: |