日期:2014-05-19  浏览次数:20628 次

给文件取MD5值竟然用了400M内存,叹~,你能将内存降到20M么?
给定一个文件,算出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以内?谢谢~

------解决方案--------------------
.NET是把所有内容都读到内存里面再运算,当然要占这么多!
估计在.NET中没有什么好的方法!MS总是以为我们的内存和硬盘一样大!
------解决方案--------------------
分段读取? 不会吧,lz试试,和lz一起等。
------解决方案--------------------
自己用BR.ReadBytes怪谁呢。
为什么不用public byte[] ComputeHash(Stream inputStream)这个重载?