2010-02-09 77 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