我有我需要包含在内存中的快速访问转换表。到目前为止,我使用了一个简单的Hashtable
Key是内部代码,Value是一个持有外部代码和其他元数据的对象。用于双向转换数据的.NET容器?
现在我们需要进行反向查找,这意味着要根据外部代码获取内部代码。我只能拿出以下选项:
- 有另一个容器用于此查找,哈希表只包含内部代码作为值以防止更多的冗余。
- 使用我现在使用的同一个容器,并使用外部代码作为密钥(具有防止冲突的前缀)再次存储这些对象。
- 不要使用Keys获取数据,而是遍历包含在同一容器下的值以查找请求的对象(O(n),相同的内存使用情况)。
该容器正在延迟加载,所以选项1 & 2通常不会在最坏的情况下执行。
想到任何人?请告诉我有一些我可以使用的高效容器,我错过了!
*编辑*
作为一个GC'd框架,并接受事实我不得不具有两个转换阵列(词典),将实际上意味着予存储的代码的以下各行只有一个对象在内存上,然后在两个不同的散列单元下使用两个指针?
Dictionary<K1,V> forward;
Dictionary<K2,V> reverse;
//...
void Add(V myObject)
{
// myObject being the BLL object
forward.Add(myObject.InternalCode, myObject);
reverse.Add(myObject.ExternalCode, myObject);
}
Itamar。
为什么你就不能懒加载反向查找散? – Ken 2009-11-30 18:39:32
我是,即使在一个项目的基础上(而不是一次列表)。这是我的出发点 - 试图在性能和内存使用方面找到最佳选择。 – synhershko 2009-11-30 18:54:46