Sto creando un semplice strumento di backup di sincronizzazione cartelle per me stesso e ho eseguito un bel rallentamento utilizzando File.Copy. Facendo dei test copiando una cartella di ~ 44.000 file di piccole dimensioni (cartelle di posta di Windows) su un'altra unità del mio sistema, ho scoperto che usare File.Copy era più lento di 3 volte rispetto all'uso di una riga di comando e di eseguire xcopy per copiare gli stessi file/cartelle. La versione di My C# impiega più di 16 minuti per copiare i file, mentre xcopy richiede solo 5 minuti. Ho provato a cercare aiuto su questo argomento, ma tutto quello che trovo sono le persone che si lamentano della lenta copia di file di grandi dimensioni su una rete. Questo non è né un grosso problema di file né un problema di copia di rete..net File.Copy molto lento durante la copia di molti file di piccole dimensioni (non in rete)
Ho trovato un interesting article about a better File.Copy replacement, ma il codice pubblicato ha alcuni errori che causano problemi con lo stack e non sono affatto abbastanza esperto per risolvere i problemi nel suo codice.
Esistono metodi semplici o semplici per sostituire File.Copy con qualcosa di più veloce?
Grazie per le buone informazioni! Ero particolarmente interessato a provare a buffering delle letture/scritture come hai descritto XCopy. Ho fatto alcuni test con un buffer da 50mb e ho scoperto che il mio tempo di copia era ridotto a 14 min 40 sec. Quindi non un miglioramento sorprendente, ma migliore. Ancora anni luce dietro i tempi di XCopy. Vedrò se il threading delle letture/scritture aiuta il prossimo ... – Guavaman
In realtà, sono tornato a 16 minuti dopo che ho realizzato che il mio sistema di copia buffered basato su FileStream non stava copiando le proprietà del file (attributi, tempo di creazione, ecc.) Dopo averli aggiunti di nuovo, il tempo di copia è tornato al punto in cui si trovava con File.Copy, solo che ho perso 50 MB di memoria per il buffering. :( – Guavaman