Muszę synchronizować duże pliki na niektórych komputerach. Pliki mogą mieć rozmiar do 6 GB. Synchronizacja będzie wykonywana ręcznie co kilka tygodni. Nie mogę brać pod uwagę nazw plików, ponieważ mogą się one zmienić w dowolnym momencie.
Mój plan polega na utworzeniu sum kontrolnych na komputerze docelowym i na komputerze źródłowym, a następnie skopiowanie wszystkich plików z sumą kontrolną, które nie znajdują się jeszcze w miejscu docelowym, do miejsca docelowego. Moja pierwsza próba wyglądała mniej więcej tak:
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);
}
}
Problem
dotyczył czasu wykonania: - z SHA256 z plikiem 1,6 GB -> 20 minut
- z MD5 z plikiem 1,6 GB -> 6,15 minuty
Czy istnieje lepszy - szybszy - sposób uzyskania sumy kontrolnej (może z lepszą funkcją mieszającą)?