У меня есть Dictionary<string,int>
, который может содержать более 10 миллионов уникальных ключей. Я пытаюсь уменьшить объем памяти, который требуется для этого, сохраняя при этом функциональность словаря.
У меня была идея хранить хеш строки как long, вместо этого это уменьшает использование памяти приложения до приемлемого уровня (от ~ 1,5 гига до ~ 0,5 гигабайта), но я не очень хорошо себя чувствую метод для этого.
long longKey=
BitConverter.ToInt64(cryptoTransformSHA1.ComputeHash(enc.GetBytes(strKey)), 0);
По сути, это отсекает конец хэша SHA1 и помещает первый его фрагмент в long, который я затем использую в качестве ключа. Хотя это работает, по крайней мере, для данных, с которыми я тестирую, я не чувствую, что это очень надежное решение из-за повышенной вероятности столкновений ключей.
Существуют ли другие способы уменьшить объем памяти в Словаре, или метод, описанный выше, не так ужасен, как мне кажется?
[править]
Чтобы уточнить, мне нужно сохранить возможность поиска значения, содержащегося в словаре, используя строку. Сохранение фактической строки в словаре занимает много памяти. Вместо этого я хотел бы использовать Dictionary<long,int>
, где long - результат хеширования в строке.