Question

Je suis curieux de savoir ce qui fait Robocopy (Fichier robuste Copie) si rapide et robuste. Tout le monde sait ce qui est l'API / Algo utilisé pour Robocopy? Tout le monde a étudié Robocopy?

Je demande depuis que je dois écrire une méthode (.NET / C #) qui permet de copier les répertoires / fichiers rapide et sans erreurs ... La quantité de données peut aller jusqu'à 15Gb et je ne peux pas simplement appeler Robocopy pour divers raisons.

Merci!

Était-ce utile?

La solution

Vous pouvez obtenir très proche de la vitesse de Robocopy avec un programme simple C # qui fait asynchrone lit et écrit en utilisant un FileStream standard avec un tampon 64K. tampon plus grandes tailles jusqu'à 256K donnera une légère augmentation de la performance. Plus grand que 256K va ralentir les choses dans une mesure surprenante. Dans mes tests, en utilisant un tampon 512K a presque deux fois plus longtemps que la copie avec un tampon 256K.

L'idée est assez simple:

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

Il est une chose assez simple à écrire. Mon programme qui fait cela est presque aussi rapide que Robocopy et ne provoque pas le genre de problèmes Robocopy provoque lorsque vous copiez un fichier très volumineux (centaines de giga-octets) à partir d'un serveur.

Un peu plus d'infos sur le grand problème de copie de fichiers .

Notez que cette chose en lecture / écriture asynchrone ne fait pas beaucoup pour des performances si vous êtes lecture et d'écriture sur le même disque physique. Il est plus efficace lorsque la source et la destination sont sur des disques différents.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top