2010-10-21 98 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上的大文件複製問題。

請注意,如果您正在讀取和寫入同一物理磁盤,則此異步讀/寫操作對性能沒有太大作用。當源和目標位於不同的驅動器上時,它是最有效的。

相關問題