Dot-Net

Robocopy 背後的算法是什麼?

  • March 20, 2021

我很想知道是什麼讓 Robocopy(強大的文件複製)如此快速和強大。任何人都知道 Robocopy 使用的 API/算法是什麼?有人研究過Robocopy嗎?

我在問,因為我必須編寫一個方法(在 .NET/C# 中),它可以快速複製目錄/文件並且沒有錯誤……數據量可以高達 15Gb,我不能因為各種原因簡單地呼叫 Robocopy。

謝謝!

通過一個簡單的 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

寫起來很簡單。我的程序執行此操作的速度幾乎與 Robocopy 一樣快,並且不會導致從伺服器複製非常大(數百 GB)的文件時Robocopy 導致的各種問題。

關於大文件複製問題的更多資訊。

請注意,如果您正在讀取和寫入同一個物理磁碟,那麼這種非同步讀/寫操作對性能影響不大。當源和目標位於不同的驅動器上時,它最有效。

引用自:https://stackoverflow.com/questions/3989472