Robocopy背后的算法是什么?

Mar*_*tin 5 .net file-io .net-4.0 robocopy

我很想知道是什么让Robocopy(强大的文件复制)变得如此快速和强大.任何机构都知道什么是用于Robocopy的API/Algo?有人研究过Robocopy吗?

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

谢谢!

Jim*_*hel 13

你可以通过一个简单的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
Run Code Online (Sandbox Code Playgroud)

写这是一件非常简单的事情.我执行此操作的程序几乎与Robocopy一样快,并且当您从服务器复制非常大(100千兆字节)的文件时,不会导致Robocopy引起的各种问题.

有关大文件复制问题的更多信息.

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