私には、Dictionary<string,int>
1,000万以上の一意のキーが含まれる可能性があるがあります。辞書の機能を維持しながら、これに必要なメモリの量を削減しようとしています。
代わりに、文字列のハッシュを長く保存することを考えていました。これにより、アプリのメモリ使用量が許容可能な量(〜1.5ギガから〜.5ギガ)に減少しますが、私の方法についてはあまり気分が良くありません。これ。
long longKey=
BitConverter.ToInt64(cryptoTransformSHA1.ComputeHash(enc.GetBytes(strKey)), 0);
基本的に、これはSHA1ハッシュの終わりを切り取り、その最初のチャンクをlongに入れ、それをキーとして使用します。これは機能しますが、少なくとも私がテストしているデータについては、キーの衝突の可能性が高くなるため、これが非常に信頼できるソリューションであるとは思えません。
辞書のメモリフットプリントを削減する他の方法はありますか、それとも上記の方法は私が思っているほどひどいものではありませんか?
[編集]明確にするために、文字列を使用して辞書に含まれる値を検索する機能を維持する必要があります。実際の文字列を辞書に保存すると、多くのメモリが必要になります。代わりに私がしたいのはDictionary<long,int>
、longが文字列のハッシュ関数の結果であるaを使用することです。