2010-02-09 79 views
0

我想優化我的ASP.NET縮略圖腳本,所以它不會調整所有圖像的大小,並且問題的一部分是選擇哈希函數縮略圖命名/檢查程序。哈希文件名最快的ASP.NET哈希函數

crc32是否可以完成任務?我問的原因是輸入數據很小(只有相對路徑,大小和日期)。

+1

如果您只需要散列文件名,有什麼不對的字符串默認的GetHashCode實現? – 2010-02-09 14:25:22

+1

從技術上講,對於每個輸入,最快的散列函數應該是'return 0;'。在沒有定義散列函數的特定要求的情況下,不可能知道*最快*是什麼。 – 2010-02-09 14:26:52

回答

0

您可以在散列中使用多種選擇。

Lasse V. Karlsen評論說,如果你的文件名是string.GetHashCode(),那麼如果大多數情況下是足夠好的話。 如果您的文件散列文件的內容,您的選擇範圍從CRC32,MD5,SH1,SH256-infinte。

如果你將文件散列化,我猜MD5/SHA1將會足夠好。如果我在哪裏建立測試用例(可能是一臺虛擬機),它運行着應用程序應支持的最低硬件,並嘗試MD5/SHA1。看看這個速度對你來說是否足夠好,並檢查Hashing collision(因此你的測試用例中有儘可能多的圖片)。

找到了一個很好的文章here許多散列函數

+0

GetHashCode看起來很有趣(不知道它存在),但它的hashspan似乎只是整數寬度,這會讓我處於〜4B組合 - 在這樣一個小空間中會碰到一兩個碰撞? 不知道字符串類型中有多少個排列?否則它恰好適合該法案。 – steakoverflow 2010-02-10 11:43:39

+0

我與GetHashCode()的常規做法是首先比較int,然後比較字符串。這樣,我100肯定它是一個真正的匹配,我也得到比較int的高速 – EKS 2010-02-10 12:53:26