在我目前正在进行的一个 C# 项目中,我们试图通过网络计算大量文件的 MD5(当前 pot 是 270 万,client pot 可能超过 1000 万)。随着我们正在处理的文件数量,速度是一个问题。
我们这样做的原因是为了验证文件是否被复制到不同的位置而没有修改。
我们目前使用下面的代码来计算一个文件的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,以防将来某个客户希望对我们的程序进行窃听,所以我猜所有文件都被复制)
我意识到网络速度可能是一个主要因素(100Mbit/s)。有没有一种有效的方法来计算网络上文件内容的 MD5?
提前致谢。特雷弗·沃森
编辑:将所有代码放在块中,而不仅仅是其中的一部分。