2011-04-22 61 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