ฉันต้องซิงค์ไฟล์ขนาดใหญ่ในเครื่องบางเครื่อง ไฟล์สามารถมีขนาดสูงสุด 6GB การซิงค์จะดำเนินการด้วยตนเองทุกสองสามสัปดาห์ ฉันไม่สามารถนำชื่อไฟล์มาพิจารณาเพราะพวกเขาสามารถเปลี่ยนแปลงได้ตลอดเวลา
แผนของฉันคือสร้าง checksums บนพีซีปลายทางและบนพีซีต้นทางแล้วคัดลอกไฟล์ทั้งหมดที่มี checksum ซึ่งไม่ได้อยู่ในปลายทางไปยังปลายทางแล้ว ความพยายามครั้งแรกของฉันคือสิ่งนี้:
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 GB -> 20 นาที
- ด้วย MD5 พร้อมไฟล์ 1,6 GB -> 6.15 นาที
มีวิธีที่ดีกว่า - เร็วกว่าในการรับเช็คซัม (หรืออาจใช้ฟังก์ชันแฮชที่ดีกว่า)