11

我正在使用以下代码来计算文件的 MD5SUM -

byte[] b = System.IO.File.ReadAllBytes(file);
string sum = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(b));

这正常工作,但如果我遇到一个大文件 (~1GB) - 例如 iso 映像或 DVD VOB 文件 - 我会收到内存不足异常。

不过,我可以在大约 10 秒内计算 cygwin 中相同文件的 MD5SUM。

请建议我怎样才能让它适用于我的程序中的大文件。

谢谢

4

1 回答 1

29

我建议使用替代方法:

MD5CryptoServiceProvider.ComputeHash(Stream)

并只需传入在您的文件上打开的输入流。这种方法几乎肯定不会一口气读入内存中的整个文件。

我还要注意,在 MD5 的大多数实现中,可以byte[]一次将一个数据块添加到摘要函数中,然后在最后询问哈希值。

于 2009-04-30T07:14:02.760 回答