我很想知道是什麼讓Robocopy(強大的文件複製)如此快速和強大。任何機構都知道API/Algo用於Robocopy的是什麼?有人研究過Robocopy?Robocopy背後的算法是什麼?
我在問,因爲我必須編寫一個方法(在.NET/C#中),它將快速複製目錄/文件並且沒有錯誤...數據量可以達到15GB,我不能簡單地調用Robocopy for很多原因。
謝謝!
我很想知道是什麼讓Robocopy(強大的文件複製)如此快速和強大。任何機構都知道API/Algo用於Robocopy的是什麼?有人研究過Robocopy?Robocopy背後的算法是什麼?
我在問,因爲我必須編寫一個方法(在.NET/C#中),它將快速複製目錄/文件並且沒有錯誤...數據量可以達到15GB,我不能簡單地調用Robocopy for很多原因。
謝謝!
通過一個簡單的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上的大文件複製問題。
請注意,如果您正在讀取和寫入同一物理磁盤,則此異步讀/寫操作對性能沒有太大作用。當源和目標位於不同的驅動器上時,它是最有效的。
定義快速15個字符 – Woot4Moo 2010-10-21 16:11:01
我的意思是和Robocopy一樣快。你有沒有比較過使用Windows資源管理器和Robocopy複製一個文件夾與許多千兆字節的數據?根據我的經驗,Robocopy總是贏。 – Martin 2010-10-21 16:16:55