我有一个可能包含1000万个以上唯一键的Dictionary<string,int>
。我想尽量减少内存使用,同时仍然保持字典的功能。
我的想法是将字符串的哈希值作为长整型存储,这样可以将应用程序的内存使用减少到可接受的水平(从约1.5 GB降至约0.5 GB),但我对自己的方法感到不太满意。
long longKey=
BitConverter.ToInt64(cryptoTransformSHA1.ComputeHash(enc.GetBytes(strKey)), 0);
基本上,这个方法是截取SHA1哈希的结尾,并将其第一块放入long中,然后将其用作键。虽然这个方法可以工作,至少对于我测试的数据而言,但由于键冲突的可能性增加,我认为这不是一个非常可靠的解决方案。
是否有其他减少字典内存占用的方法,或者我上面的方法并没有我想象中那么糟糕?
[编辑] 澄清一下,我需要保持使用字符串查找字典中的值的能力。在字典中存储实际字符串会占用太多内存。相反,我想使用一个
Dictionary<long,int>
,其中long是字符串的哈希函数的结果。