【发布时间】:2011-03-24 20:52:36
【问题描述】:
在同一驱动器上从文件夹 A 到文件夹 B 的 1.6GB 文件执行 File.Copy(src, dest); 大约需要 2 分钟。有没有更快的方法在 C#/.NET 中以代码(无硬件)执行此操作 - 使用流、线程等?
文件流会更快吗?使用线程池将文件分块并读取一系列字节/写入一系列字节的类怎么样[这听起来是破坏文件的好方法,但完整性在这里不是优先级1,它的速度:-) ]
我已经搜索过,但每个人都说使用 File.Copy,但它很慢(与 Windows Copy 一样慢)- 我不想使用 3rd 方工具。
以下是一些问题的答案:
复制时间对比:
> C# : 2.15m
> Windows Explorer: 2.53m
> TeraCopy: 2.26m
> FastCopy: 2.24m
好的,这些不是平均值,我知道它们在随后的运行中可能会略有变化,但我真的认为会有一种更快的方法来复制文件,因为我假设 Windows 正在执行额外的安全性和完整性检查 :-(
我仍然希望得到一些好的答案(比如'哦,是的,如果你缓冲 m 并关闭安全性,超过 1.5GB 的文件会更快 x em>n') -- 好的,我现在只是希望。
【问题讨论】:
-
我认为你很难在 windows 盒子上进行文件复制,比 windows 更快。
-
我假设您的驱动器是传统的基于盘片的驱动器。如果是这样,分块文件可能会由于查找时间而减慢速度。
-
将 1.6GB 复制到 same 驱动器上的新位置并不是对硬盘驱动器非常好的活动。它必须到处跳来支持同时读写。
-
告诉我,从 Windows 资源管理器中复制同一个文件需要多长时间?
-
"TeraCopy 使用动态调整的缓冲区来减少查找时间。" en.wikipedia.org/wiki/Teracopy
标签: c#