我的HashTables应用程序中发生了一件非常奇怪的事情。
首先关闭:是的,我知道HashTables不应该以插入的方式或任何其他方式(但是键的哈希值)进行排序。这不回答我的问题。我不需要它订购,我只是想知道为什么它在两个看似相同的系统之间有所不同。
所以,在这里。左边是IIS排序,右边是Visual Studio。
为什么会有所不同?考虑到.NET应该(?)使用相同的算法来存储和检索来自HashTable的数据,那么双方的排序应该是相同的,不是吗?
如果我学习它,HashTable的键被散列,那么这两个系统上的散列应该是相同的,导致散列(键)的顺序相同,因此散列表中的数据顺序相同。
我哪里错了? IIS和VS之间的HashTable实现有什么区别?
评论中的一些额外说明:
bin
文件夹复制到IIS文件夹,因此它们完全相同答案 0 :(得分:4)
为了使表中的项具有相同的顺序,必须满足几个条件:
答案 1 :(得分:0)
正如@usr帮助我找到的,这种行为的原因在于GetHashCode()函数,它被用作HashTable
个键的基础。根据密钥,HashTable
上的迭代顺序将不同。
哈希函数通常应该为每个输入返回相同的哈希值,但是 ...此函数返回不同的哈希值,具体取决于配置参数,即<UseRandomizedStringHashAlgorithm>,它将返回不同的哈希,由神秘函数InternalMarvin32HashString()创建。
它是为防止 Hash Flooding DOS攻击向量而引入的。
此功能
来自Martin Boßlet Dec 14th, 2012 的[...]从外部DLL导入,确切地说就是clr.dll。
所以我们无法真正知道,如果没有一些重大(甚至可能是非法的)重构,它会做什么。