Frage

Ich bin neugierig, was Robocopy macht (Robust File Copy) so schnell und robust. Jeder Körper weiß, was die API / Algo für Robocopy verwendet? Jeder studierte Robocopy?

Ich frage da ich eine Methode schreiben (in .NET / C #), welche Verzeichnisse / Dateien schnell kopiert und ohne Fehler ... Die Menge der Daten kann zu 15GB gehen und ich kann einfach nicht nennen Robocopy für verschiedene Gründe.

Danke!

War es hilfreich?

Lösung

können Sie erhalten ganz in der Nähe Robocopy die Geschwindigkeit mit einem einfachen C # Programm, das asynchrone tut liest und schreibt einen Standard FileStream mit einem 64K-Puffer verwendet wird. Größere Puffergrößen bis 256 K bis eine leichte Leistungssteigerung geben. Größer als 256 K wird die Dinge langsam zu einem überraschenden Ausmaß nach unten. In meinen Tests, nahm einen 512K-Puffer mit fast doppelt so lang wie bei einem 256K-Puffer kopiert werden.

Die Idee ist ziemlich einfach:

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

Es ist eine ziemlich einfache Sache zu schreiben. Mein Programm, das tut dies fast so schnell wie Robocopy ist und verursacht nicht die Art von Probleme, die Robocopy verursacht , wenn Sie eine sehr große (hundert Gigabyte) Datei von einem Server sind zu kopieren.

ein bisschen mehr info auf dem großen Dateikopierproblem .

Beachten Sie, dass diese asynchrone Lese- / Schreib-Sache nicht viel für die Leistung nicht tun, wenn Sie lesen von und zu der gleichen physischen Festplatte zu schreiben. Es ist am effektivsten, wenn die Quelle und das Ziel auf verschiedenen Laufwerken sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top