用于雾化T的.Net集合?

时间:2015-02-27 09:39:53

标签: c# .net collections hashset

我正在寻找是否存在预先存在的.Net' Hash-Set类型'适用于雾化一般类型T的实现。我们有大量相同的对象进入序列化源,需要雾化以节省内存。

Dictionary<T,T> with the value == key完美无缺,但这些集合中的对象在整个应用程序中可能会遇到数百万,因此将2个引用存储到每个对象似乎非常浪费。

HashSet不能用,因为它只有Contains,有吗?没办法?到达实际的成员实例。

显然我可以自己滚动,但想检查是否有任何预先存在的东西。在C5的扫描没有看到任何跳出来,但是他们250多页的文档确实让我想知道我是否错过了什么。

编辑 这个基本的想法是我需要能够获得独特的对象,即HashSet包含(T obj)但不是Get(T obj) /修改

最糟糕的收集只需要实施:

T GetOrAdd(T candidate)
void Clear()

采取仲裁IComparer 并且GetOrAdd是~O(1)并且理想地是原子的,即不会浪费时间Hashing两次。

编辑如果对现有实施失败,我们将不胜感激任何有关基本散列/暂停机制的来源的建议。 - 已经指出了Mono HashSet来源,因此本节的回答是 / EDIT

1 个答案:

答案 0 :(得分:0)

您可以从Reference Source获取HashSet<T>的源代码,并编写自己的GetOrAdd方法。