Devo sincronizzare file di grandi dimensioni su alcune macchine. I file possono avere dimensioni massime di 6 GB. La sincronizzazione verrà eseguita manualmente ogni poche settimane. Non posso prendere in considerazione il nome del file perché possono cambiare in qualsiasi momento.
Il mio piano è creare checksum sul PC di destinazione e sul PC di origine e quindi copiare tutti i file con un checksum, che non sono già nella destinazione, nella destinazione. Il mio primo tentativo è stato qualcosa del genere:
using System.IO;
using System.Security.Cryptography;
private static string GetChecksum(string file)
{
using (FileStream stream = File.OpenRead(file))
{
SHA256Managed sha = new SHA256Managed();
byte[] checksum = sha.ComputeHash(stream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}
Il problema era il runtime:
- con SHA256 con un file da 1,6 GB -> 20 minuti
- con MD5 con un file da 1,6 GB -> 6,15 minuti
Esiste un modo migliore - più veloce - per ottenere il checksum (forse con una migliore funzione hash)?