2010-10-21 76 views
4

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

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

谢谢!

+0

定义快速15个字符 – Woot4Moo 2010-10-21 16:11:01

+0

我的意思是和Robocopy一样快。你有没有比较过使用Windows资源管理器和Robocopy复制一个文件夹与许多千兆字节的数据?根据我的经验,Robocopy总是赢。 – Martin 2010-10-21 16:16:55

回答

12

通过一个简单的C#程序,您可以非常接近Robocopy的速度,该程序使用具有64K缓冲区的标准FileStream进行异步读写。较大的缓冲区大小可达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一样快,当您从服务器复制一个非常大的(百兆字节)文件时,不会导致problems that Robocopy causes种类。

A bit more info上的大文件复制问题。

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