2011-06-23 5 views
0

J'essaye de copier beaucoup de fichiers en utilisant une méthode de boucle et CopyTo. La copie est très lente. abot 10 mb par minute! (contrairement au clic droit dans la souris et la copie).Copier dans C# est très lent

Existe-t-il des alternatives à utiliser, qui sont plus rapides?

+1

@Jon ajouter du sel ... – evilone

+1

S'il vous plaît lire la FAQ pour obtenir des conseils sur la façon d'améliorer la formulation de votre question http://stackoverflow.com/faq – Pooli

+1

ou peut-être un peu de poulet. – RPM1984

Répondre

2

Oui, utilisez FileStream pour mettre en mémoire tampon en conséquence. À titre d'exemple, quelque chose le long des lignes de cela devrait vous donner une idée:

using (var inputStream = File.Open(path, FileMode.Read), 
    outputStream = File.Open(path, FileMode.Create)) 
{ 
    var bufferRead = -1; 
    var bufferLength = 4096; 
    var buffer = new byte[bufferLength]; 

    while ((bufferRead = inputStream.Read(buffer, 0, bufferLength)) > 0) 
    { 
     outputStream.Write(buffer, 0, bufferRead); 
    } 
} 

Réglez le bufferLength en conséquence. Vous pourriez potentiellement construire des choses autour de ceci pour améliorer sa vitesse globale, mais ajuster légèrement devrait toujours fournir une amélioration assez significative.

1

La méthode la plus rapide (et la plus pratique) pour copier un fichier est probablement File.Copy. Y a-t-il une raison pour laquelle vous ne l'utilisez pas?