【发布时间】:2010-09-27 14:36:40
【问题描述】:
我有一个Dictionary<string,int>,它有可能包含超过 10+ 百万个唯一键。我正在尝试减少所需的内存量,同时仍保持字典的功能。
我的想法是将字符串的哈希存储为 long,这会将应用程序的内存使用量减少到可接受的量(~1.5 gig 到 ~.5 gig),但我对我的感觉不太好这样做的方法。
long longKey=
BitConverter.ToInt64(cryptoTransformSHA1.ComputeHash(enc.GetBytes(strKey)), 0);
基本上,这会切断 SHA1 哈希的末尾,并将其第一块放入一个 long 中,然后我将其用作密钥。虽然这可行,但至少对于我正在测试的数据而言,我觉得这不是一个非常可靠的解决方案,因为键冲突的可能性增加了。
有没有其他方法可以减少字典的内存占用,或者我上面的方法没有我想象的那么可怕?
[编辑]
为了澄清,我需要保持使用字符串查找字典中包含的值的能力。将实际字符串存储在字典中会占用大量内存。我想做的是使用Dictionary<long,int>,其中 long 是字符串上散列函数的结果。
【问题讨论】:
-
我怀疑 64 位哈希是否存在冲突的可能性。
-
我想也是这样,但只是将字节“切”成两半似乎有点不确定。
-
我开始发现这个问题可能真的很糟糕。请随时通知我们,我会对您的最终解决方案非常感兴趣。
-
首先字符串有多大?
标签: c# data-structures memory-management dictionary