Мне нужно синхронизировать большие файлы на некоторых машинах. Файлы могут иметь размер до 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 минут
Есть ли лучший и более быстрый способ получить контрольную сумму (возможно, с лучшей хеш-функцией)?