我很好奇Robocopy(强力文件复制)是如何做到如此快速和稳健的。有人知道Robocopy使用的API /算法是什么吗?有人研究过Robocopy吗?
我之所以问这个问题,是因为我需要编写一个方法(在.NET/C#中),可以快速且无误地复制目录/文件......数据量可能高达15GB,出于各种原因,我不能简单地调用Robocopy。
谢谢!
我很好奇Robocopy(强力文件复制)是如何做到如此快速和稳健的。有人知道Robocopy使用的API /算法是什么吗?有人研究过Robocopy吗?
我之所以问这个问题,是因为我需要编写一个方法(在.NET/C#中),可以快速且无误地复制目录/文件......数据量可能高达15GB,出于各种原因,我不能简单地调用Robocopy。
谢谢!
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引起的问题。
请注意,如果您从同一物理磁盘读取和写入数据,则此异步读/写操作对性能没有太大帮助。当源和目标位于不同驱动器上时,它最有效。