2011-04-22 62 views
1

我在Windows Mobile 5中使用C#。该程序从互联网下载大型文件及其哈希值。然后它计算下载数据的哈希值并将其与预期的哈希值进行比较。这个想法是验证整个文件是否已经下载完整。针对大数据量的存储器高效哈希算法

问题是,如果将文件的全部内容放入字节数组中的内存中,该文件足够大,那么设备将耗尽内存。不过,我想这样做,以便我可以计算字节的散列。是否有可能计算散列,而不一次在内存中的所有字节?最好我想使用SHA1Managed类来计算SHA1散列值,但如果有必要,我愿意改变它。我注意到接受Stream的SHA1Managed.ComputeHash()方法存在重载,但我不知道它是否使用的内存少于只是将所有字节拖入内存以及我知道的内存分析器。 NET CF完全没用。

回答

3

SHA1Managed.ComputeHash(Stream)假设您在计算散列值后丢弃流的内容,应该更有效地利用内存。您将使用多少内存将部分基于Stream实施。

+0

如果数据已经写入文件,那么对于这种情况什么是好的Stream实现?使用File.OpenRead(fileName)返回FileStream是否正确? – 2011-04-23 00:01:31

+0

FileStream应该可以正常工作。 – 2011-04-23 00:03:50

+0

如果Stream实现将整个文件拖入内存中,我试图用足够大的文件将内存耗尽。它的工作,谢谢! – 2011-04-23 00:42:59

1

这里是它是如何在桌面上完成的:

Compute a hash from a stream of unknown length in C#

这应该是很容易测试通过使用输入源不是量越大流实现无论是在整个文件拉动或不内存可用。

+0

感谢您使用足够大的文件来测试Stream实现的想法! – 2011-04-23 00:41:35