Robocopy背后的算法是什么?

7

我很好奇Robocopy(强力文件复制)是如何做到如此快速和稳健的。有人知道Robocopy使用的API /算法是什么吗?有人研究过Robocopy吗?

我之所以问这个问题,是因为我需要编写一个方法(在.NET/C#中),可以快速且无误地复制目录/文件......数据量可能高达15GB,出于各种原因,我不能简单地调用Robocopy。

谢谢!


我指的是像Robocopy一样快。你有没有比较过使用Windows资源管理器和Robocopy复制一个包含数GB数据的文件夹?根据我的经验,Robocopy总是胜出。 - Martin
1个回答

17
你可以使用一个简单的C#程序,使用标准的FileStream和64K缓冲区进行异步读写,从而达到接近Robocopy速度的效果。增加缓冲区大小可略微提高性能,最大缓冲区大小为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引起的问题

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

请注意,如果您从同一物理磁盘读取和写入数据,则此异步读/写操作对性能没有太大帮助。当源和目标位于不同驱动器上时,它最有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接