给定一个文件,算出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以内?谢谢~

解决方案 »

  1.   

    .NET是把所有内容都读到内存里面再运算,当然要占这么多!
    估计在.NET中没有什么好的方法!MS总是以为我们的内存和硬盘一样大!
      

  2.   

    分段读取? 不会吧,lz试试,和lz一起等。
      

  3.   

    自己用BR.ReadBytes怪谁呢。
    为什么不用public byte[] ComputeHash(Stream inputStream)这个重载?
      

  4.   

    谢谢各位,另外不是给文件加密,就只是单纯的为文件计算MD5值,分段处理,考虑过,好像不行,MD5是计算总体的。
      

  5.   

    to:danjiewu(阿丹)
    回的真快,我马上验证,谢谢
      

  6.   

    to:danjiewu(阿丹)
    验证成功,是我学艺不精,内存在17~18M这间。
    这是我最快一次结贴