.NET:通用字典的可伸缩性

Jam*_*ead 3 c# generics hash caching dictionary

我用a Dictionary<>来存储数以亿计的物品.是否可以安全地假设,只要服务器的内存有足够的空间来容纳我将接近O(1)从中检索项目的这些无数物品?当性能很重要时,我应该知道如何将通用词典用作大缓存?

编辑:我不应该依赖默认的实现?是什么促成了良好的散列函数?

Ale*_*lli 12

它几乎完全取决于你的"bazillion items"支持的散列函数有多好 - 如果它们的散列函数不是很好(因此产生了很多冲突),你的性能会随着字典的增长而降低.


Eri*_*ert 8

你应该测量它并找出答案.您是了解字典确切用法的人,因此您可以衡量字典是否符合您的需求.

一条忠告:我过去对大字典结构进行了性能分析,发现随着字典变得非常大,性能确实降低了.但它似乎在这里和那里降级,而不是每次操作都一致.我在尝试分析哈希算法等方面做了很多工作,然后在额头上打了一拳.该垃圾收集器是越来越慢,因为我有这么多的现场工作组; 字典和以往一样快,但是如果一个集合碰巧被触发,那就是吃掉了我的周期.

这就是为什么不在不切实际的基准测试场景中进行性能测试很重要的原因; 找出你的bazillion-item字典的实际性能成本是什么,好吧,这将是关于许多与你的字典无关的东西的门控,比如在你的其余部分中发生了多少集合触发程序,何时.