.Net Collection 用于雾化T?

.Net Collection for atomizing T?

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

一个 Dictionary<T,T> with the value == key 工作得很好,但是这些集合中的对象可以 运行 在整个应用程序中达到数百万,因此为每个对象存储 2 个引用似乎非常浪费。

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

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

编辑 基本的想法是我需要能够得到唯一的对象 即 HashSet 有 Contains(T obj) 但是不是 Get(T obj) /EDIT

最差的集合只需要实现:

T GetOrAdd(T candidate)
void Clear()

并取一个任意的 IComparer GetOrAdd 是 ~O(1) 并且 理想情况下 是原子的,即不会浪费时间哈希两次。

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

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