File.Copy(src, dest);从同一驱动器上的文件夹A到文件夹B 执行1.6GB文件大约需要2分钟.有没有更快的方法在C#/ .NET代码中执行此操作(没有硬件) - 有流,线程等的东西?
文件流会更快吗?如何使用线程池对文件进行分块,并读取一系列字节/写入一系列字节[听起来像是破坏文件的好方法,但完整性不是优先级1,它的速度:-) ]
我搜索过但是每个人都说使用File.Copy,但速度很慢(和Windows Copy一样慢) - 我宁愿不使用第三方工具.
以下是一些问题的一些答案:
复制时间比较:
> C# : 2.15m
> Windows Explorer: 2.53m
> TeraCopy: 2.26m
> FastCopy: 2.24m
Run Code Online (Sandbox Code Playgroud)
好吧,那些不是平均值,我知道它们可能会在后续运行中略有变化,但我真的认为有更快的方法来复制文件,因为我认为Windows正在进行额外的安全性和完整性检查:-(
我仍然希望得到一些好的答案(比如'哦,如果你做缓冲m并关闭安全n ' ,超过1.5GB的文件会快x倍) - 好的,我只是希望在这一点上.
如果您对创建符号或硬链接而不是实际副本感兴趣,那么以下Windows API可能会有所帮助.
您可以尝试使用已经可以使用的硬件,并在内存中分配一个大缓冲区.通过读取和写入更大的块,您可以删除一些开销.
但是,没有太多的开销摆脱,瓶颈仍然是磁盘I/O. 我希望最好能节省5%的执行时间.
File.Copy 调用Kernel32.dll 中的CreateFile。如果您正在复制大量的小文件(想想数百万个),那么执行 P/Invoke 来处理参数并跳过权限需求可能是值得的。一个大文件 2 分钟的 99.999% 都花在驱动程序代码中。