HashTable数据结构替代方案,它使用较少的内存

时间:2012-06-20 07:19:57

标签: c# data-structures

我有大量的物品。每个对象都有一个唯一的GUID。我需要这个GUID的地图对象。我现在使用System.Collections.Hashtable。问题是添加对象hashset会改变其大小并导致Large对象的碎片化。它还需要两倍于我拥有对象的内存。我需要减少内存使用量。

我需要的数据结构的特征:

  • 添加对象
  • 按ID
  • 删除对象
  • 按ID
  • 查找对象
  • 运行数据结构中的所有对象(foreach)

为此目的,最佳数据结构是什么?我知道有红黑和AVL树,但我不知道哪种树更好用。也许还有另一种树数据结构适合按唯一标识符或字符串进行映射?哪种数据结构可以更快地运行?

2 个答案:

答案 0 :(得分:0)

数据结构是静态的还是动态的?如果它是静态的,请考虑使用perfect hashing。在没有太多内存开销的情况下,您将获得哈希表的好处。

不要依靠树来解决你的问题...他们也有相当高的内存开销,而且查询和更新的速度往往较慢。

答案 1 :(得分:0)

哈希表中的500,000个条目真的不是很多。只需告诉哈希表它在创建它时会变大:

var myDict = new Dictionary<key,val>(1000000);

这将创建一个具有接近1,000,000个元素的空间的字典。当你接近1,000,000时,它会被调整大小。旧的非泛型Hashtable为您提供更多控制权,允许您指定加载因子,以控制重新分配。看here