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

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

有帮助吗?

解决方案

这完全取决于你的<!>“bazillion项目<!>”的哈希功能有多好。支持 - 如果它们的散列函数不是很好(这会导致很多冲突),那么随着字典的增长,你的表现会降低。

其他提示

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

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

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

是的,你将有O(1)访问时间。事实上,作为迂腐 g ,它将正好是O(1)。 您需要确保用作键的所有对象都具有良好的GetHashCode实现,并且可能会覆盖Equals。

编辑以澄清:实际上,除非你能提供<!>完美的<!>,否则你拥有的物品越多,所以越多。哈希函数。

是的,无论你在“词典”中添加了多少个对象,你都会在O(1)附近。但是为了使Dictionary快速,你的key-objects应该提供足够的GetHashCode实现,因为Dictionary在里面使用了一个哈希表。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top