В проекте C #, над которым я сейчас работаю, мы пытаемся вычислить MD5 большого количества файлов по сети (текущий банк составляет 2,7 миллиона, клиентский банк может превышать 10 миллионов). С количеством файлов, которые мы обрабатываем, скорость имеет значение.
Причина, по которой мы это делаем, заключается в том, чтобы убедиться, что файл был скопирован в другое место без изменений.
В настоящее время мы используем следующий код для вычисления MD5 файла
MD5 md5 = new MD5CryptoServiceProvider();
StringBuilder sb = new StringBuilder();
byte[] hashMD5 = null;
try
{
// Open stream to file to get MD5 hash for, create hash
using (FileStream fsMD5 = new FileStream(sFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
hashMD5 = md5.ComputeHash(fsMD5);
}
catch (Exception ex)
{
clsLogging.logError(clsLogging.ErrorLevel.ERROR, ex);
}
string md5sum = "";
if (hashMD5 != null)
{
// Change hash into readable text
foreach (byte hex in hashMD5)
sb.Append(hex.ToString("x2"));
md5sum = sb.ToString();
}
Однако, скорость не та, на которую надеялся мой менеджер. Мы прошли через ряд изменений в способе и количестве файлов, для которых мы рассчитываем MD5 (т.е. мы не делаем это для файлов, которые мы не копируем ... до сегодняшнего дня, когда мой менеджер передумал так ВСЕМ файлам должен быть рассчитан MD5 для них, на случай, если в будущем клиент захочет работать с нашей программой, поэтому все файлы будут скопированы, я думаю)
Я понимаю, что скорость сети, вероятно, является основным фактором (100 Мбит / с). Есть ли эффективный способ расчета MD5 содержимого файла по сети?
Спасибо заранее.
Тревор Уотсон
Редактировать: поместить весь код в блок, а не только его часть.