Tag: 哈希哈希

System.Collections.Generic.Dictionary =终极表现?

我正在编写一个haXe C#目标,我一直在研究haXe的std库的性能差异,因此我们可以通过其跨平台代码提供最佳性能。 一个非常好的例子是哈希表代码。 我有点不情愿使用.NET的字典,因为它看起来很笨重(键/值对的结构可能占用大量的内存,因为内存对齐问题,除了它所持有的不必要的信息),并且因为在std上库没有对象哈希这样的东西,我真的以为我可以通过不必调用GetHashCode来压缩一点性能,并一直内联它。 同样很明显,Dictionary实现使用链表来处理冲突,这远非理想。 所以我们开始实现我们自己的解决方案,从IntHash(Dictionary)开始我们首先实现了Hopscotch哈希 ,但实际上并没有很好,但很明显它不支持非常好的哈希表,因为H通常是机器字,并且随着H /长度的增加,性能越差。 然后我们跳转到实现khash -inspired算法。 这个具有很大的潜力,因为它的基准测试令人印象深刻,并且它处理同一arrays上的冲突。 它还有一些很棒的东西,比如resize而不需要像我们那样需要两倍的内存。 基准令人失望。 当然,没有必要说我们的实现中的内存使用量远低于Dictionary的内存使用率。 但我希望也能获得不错的性能提升,但不幸的是情况并非如此。 它不是太低 – 不到一个数量级 – 但对于两组和得分,.NET的实现仍然表现得更好。 所以我的问题是:这是我们对C#的最佳选择吗? 我试着寻找任何自定义解决方案,似乎几乎没有。 有C5通用集合,但代码是如此混乱,我甚至没有测试。 我也找不到基准。 那么……是吗? 我应该包裹Dictionary 吗? 谢谢!!!