Tengo que sincronizar archivos grandes en algunas máquinas. Los archivos pueden tener hasta 6 GB de tamaño. La sincronización se realizará manualmente cada pocas semanas. No puedo tomar en cuenta el nombre del archivo porque pueden cambiar en cualquier momento.
Mi plan es crear sumas de verificación en la PC de destino y en la PC de origen y luego copiar todos los archivos con una suma de verificación, que aún no están en el destino, al destino. Mi primer intento fue algo como esto:
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);
}
}
El problema fue el tiempo de ejecución:
- con SHA256 con un archivo de 1,6 GB -> 20 minutos
- con MD5 con un archivo de 1,6 GB -> 6,15 minutos
¿Existe una forma mejor, más rápida, de obtener la suma de comprobación (tal vez con una mejor función hash)?