.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 方法。
我正在寻找是否有适合原子化一般类型 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 方法。