本帖最后由 zhy934453950 于 2018-5-11 15:52 编辑
问题源码://我怀疑Parallel.For(0, inputStream.Length, ever => {此处进入了死循环 FileStream inputStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
MD5 md5 = new MD5CryptoServiceProvider();
int bufferChunkSize = 1024 * 1024;//自定义缓冲区大小1MB即1024K
byte[] inputBuffer = new byte[bufferChunkSize];
int readLength = 0;//每次读取长度
byte[] outputBuffer = new byte[bufferChunkSize];
Parallel.For(0, inputStream.Length, ever => {
md5.TransformBlock(inputBuffer, 0, readLength, outputBuffer, 0);//计算MD5
});
md5.TransformFinalBlock(inputBuffer, 0, 0);//完成最后计算,必须调用(由于上一部循环已经完成所有运算,所以调用此方法时后面的两个参数都为0)
byte[] bytes = md5.Hash;
string md5Value = string.Empty;
if (bytes != null)
{
StringBuilder str = new StringBuilder();
Parallel.For(0, bytes.Length,i=> {
str.Append(bytes.ToString("X2"));
});
md5Value = str.ToString();
}
md5.Clear();
inputStream.Close();
return md5Value;
|