给定一个文件,算出MD5值核心代码如下:
//filename是一个文件如:"c:\\test.exe"
FileStream FS = new FileStream(filename, FileMode.Open, FileAccess.Read);
BinaryReader BR = new BinaryReader(FS);
MD5 md5serv = MD5CryptoServiceProvider.Create();
//ReadBytes读取整个文件算出MD5
byte[] buffer = md5serv.ComputeHash(BR.ReadBytes((int)FS.Length));
StringBuilder stringbuff = new StringBuilder();
foreach (byte var in buffer){
stringbuff.Append(var.ToString("x2"));}
BR.Close();
GC.Collect();//不加这句算完后内存不降
textBox1.Text = stringbuff.ToString();//输出值
问题描述:
我程序运行本身需要17M,为一个400M的文件计算MD5,期间内存达到430M,完成后回到17M,网上一软件WinMD5,运行3M,同样400M文件计算MD5,期间内存达到4M,完成后3M。两程序MD5运算结果相同。各位朋友有没有什么办法让程序内存占用在20M以内?谢谢~
//filename是一个文件如:"c:\\test.exe"
FileStream FS = new FileStream(filename, FileMode.Open, FileAccess.Read);
BinaryReader BR = new BinaryReader(FS);
MD5 md5serv = MD5CryptoServiceProvider.Create();
//ReadBytes读取整个文件算出MD5
byte[] buffer = md5serv.ComputeHash(BR.ReadBytes((int)FS.Length));
StringBuilder stringbuff = new StringBuilder();
foreach (byte var in buffer){
stringbuff.Append(var.ToString("x2"));}
BR.Close();
GC.Collect();//不加这句算完后内存不降
textBox1.Text = stringbuff.ToString();//输出值
问题描述:
我程序运行本身需要17M,为一个400M的文件计算MD5,期间内存达到430M,完成后回到17M,网上一软件WinMD5,运行3M,同样400M文件计算MD5,期间内存达到4M,完成后3M。两程序MD5运算结果相同。各位朋友有没有什么办法让程序内存占用在20M以内?谢谢~
估计在.NET中没有什么好的方法!MS总是以为我们的内存和硬盘一样大!
为什么不用public byte[] ComputeHash(Stream inputStream)这个重载?
回的真快,我马上验证,谢谢
验证成功,是我学艺不精,内存在17~18M这间。
这是我最快一次结贴