用于雾化T

本文关键字:用于 | 更新日期: 2024-09-08 09:33:56

我正在寻找是否有一个预先存在的.Net"哈希集类型"实现适合雾化通用类型T。我们有大量相同的对象用于序列化源,这些对象需要雾化以节省内存。

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

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

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

EDIT 基本思想是我需要能够取回唯一的对象即HashSet有Contains(T obj)但没有GET(T obg)/EDIT

收集在最坏的情况下只需要实现:

T GetOrAdd(T candidate)
void Clear()

并选择一家仲裁公司GetOrAdd是~O(1),理想情况下是原子的,即不浪费时间哈希两次。

EDIT如果现有实施失败,请就基本哈希/Bucketing机制的来源提出任何建议。-已经指出了Mono HashSet的来源,因此本节得到了回答/EDIT

用于雾化T

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