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