7

我很想知道是什么让 Robocopy(强大的文件复制)如此快速和强大。任何人都知道 Robocopy 使用的 API/算法是什么?有人研究过Robocopy吗?

我在问,因为我必须编写一个方法(在 .NET/C# 中),它可以快速复制目录/文件并且没有错误......数据量可以高达 15Gb,我不能因为各种原因简单地调用 Robocopy。

谢谢!

4

1 回答 1

17

通过一个简单的 C# 程序,您可以非常接近 Robocopy 的速度,该程序使用FileStream具有 64K 缓冲区的标准进行异步读取和写入。高达 256K 的较大缓冲区大小将略微提高性能。大于 256K 会使事情变慢到令人惊讶的程度。在我的测试中,使用 512K 缓冲区所花费的时间几乎是使用 256K 缓冲区进行复制的两倍。

这个想法很简单:

Read the first buffer from the source file
do
{
    start asynchronous write to destination file.
    Read the next buffer from the source file
    wait for asynchronous write to complete
} while not end of file

写起来很简单。我的程序执行此操作的速度几乎与 Robocopy 一样快,并且不会导致从服务器复制非常大(数百 GB)的文件时Robocopy 导致的各种问题。

关于大文件复制问题的更多信息。

请注意,如果您正在读取和写入同一个物理磁盘,那么这种异步读/写操作对性能影响不大。当源和目标位于不同的驱动器上时,它最有效。

于 2010-10-21T16:26:49.400 回答