Я должен синхронизировать большие файлы на некоторых машинах. Файлы могут быть размером до 6 ГБ. Синхронизация будет выполняться вручную каждые несколько недель. Я не могу принять во внимание имя файла, потому что они могут измениться в любое время.
Мой план состоит в том, чтобы создать контрольные суммы на конечном компьютере и на исходном компьютере, а затем скопировать все файлы с контрольной суммой, которых еще нет в месте назначения, в место назначения. Моя первая попытка была примерно такой:
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);
}
}
Проблема была во время выполнения:
- с SHA256 с файлом 1,6 ГБ → 20 минут
- с MD5 с файлом 1,6 ГБ → 6,15 минут
Есть ли лучший - более быстрый - способ получить контрольную сумму (возможно, с лучшей хэш-функцией)?