Dot-Net
Robocopy 背後的算法是什麼?
我很想知道是什麼讓 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 導致的各種問題。
關於大文件複製問題的更多資訊。
請注意,如果您正在讀取和寫入同一個物理磁碟,那麼這種非同步讀/寫操作對性能影響不大。當源和目標位於不同的驅動器上時,它最有效。