Robocopy 背后的算法是什么?
我很想知道是什么让 Robocopy(强大的文件复制)如此快速和强大。有人知道 Robocopy 使用的 API/算法是什么吗?有人学过Robocopy吗?
我之所以这么问,是因为我必须编写一个方法(在 .NET/C# 中),它将快速且无错误地复制目录/文件...数据量可能高达 15Gb,并且由于各种原因我不能简单地调用 Robocopy。
谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
通过一个简单的 C# 程序,您可以非常接近 Robocopy 的速度,该程序使用具有 64K 缓冲区的标准
FileStream
进行异步读取和写入。更大的缓冲区大小(高达 256K)将略微提高性能。大于 256K 会使速度减慢到令人惊讶的程度。在我的测试中,使用 512K 缓冲区复制所需的时间几乎是使用 256K 缓冲区复制的时间的两倍。这个想法非常简单:
编写起来非常简单。我的程序执行此操作几乎与 Robocopy 一样快,并且不会导致 当您从服务器复制非常大(数百GB)的文件时,Robocopy 导致的问题。
有关大文件复制问题的更多信息。
请注意,如果您在同一物理磁盘上进行读取和写入,则这种异步读/写操作不会对性能产生太大影响。当源和目标位于不同的驱动器上时,它是最有效的。
You can get very close to Robocopy's speed with a simple C# program that does asynchronous reads and writes using a standard
FileStream
with a 64K buffer. Larger buffer sizes up to 256K will give a slight performance increase. Larger than 256K will slow things down to a surprising extent. In my tests, using a 512K buffer took almost twice as long as copying with a 256K buffer.The idea is pretty simple:
It's a pretty simple thing to write. My program that does this is almost as fast as Robocopy and doesn't cause the kinds of problems that Robocopy causes when you're copying a very large (hundred gigabyte) file from a server.
A bit more info on the large file copy problem.
Note that this asynchronous read/write thing doesn't do much for performance if you're reading from and writing to the same physical disk. It's most effective when the source and destination are on different drives.