Eu tenho que sincronizar arquivos grandes em algumas máquinas. Os arquivos podem ter até 6 GB de tamanho. A sincronização será feita manualmente a cada poucas semanas. Não posso levar o nome do arquivo em consideração porque eles podem mudar a qualquer momento.
Meu plano é criar somas de verificação no PC de destino e no PC de origem e copiar todos os arquivos com uma soma de verificação, que ainda não está no destino, para o destino. Minha primeira tentativa foi algo assim:
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);
}
}
O problema era o tempo de execução:
- com SHA256 com um arquivo de 1,6 GB -> 20 minutos
- com MD5 com um arquivo de 1,6 GB -> 6,15 minutos
Existe uma maneira melhor - mais rápida - de obter a soma de verificação (talvez com uma melhor função de hash)?