Tengo un Dictionary<string,int>
que tiene el potencial de contener más de 10+ millones de claves únicas. Estoy tratando de reducir la cantidad de memoria que esto requiere, manteniendo la funcionalidad del diccionario.C# Dictionary Memory Management
Tuve la idea de almacenar un hash de la cadena como un largo, esto disminuye el uso de memoria de las aplicaciones a una cantidad aceptable (~ 1.5 gigas a ~ .5 gigas), pero no me siento muy bien acerca de mi método para hacer esto.
long longKey=
BitConverter.ToInt64(cryptoTransformSHA1.ComputeHash(enc.GetBytes(strKey)), 0);
Básicamente esto corta la final de un hash SHA1, y pone la primera parte de ella en un largo, que luego utilizo como una clave. Si bien esto funciona, al menos para los datos con los que estoy probando, no creo que esta sea una solución muy confiable debido a la mayor posibilidad de colisiones clave.
¿Hay alguna otra forma de reducir la huella de memoria del diccionario, o el método que he descrito anteriormente no es tan horrible como creo que es?
[edit] Para aclarar, necesito mantener la capacidad de buscar un valor contenido en el Diccionario usando una cadena. Almacenar la cadena real en el diccionario lleva a mucha memoria. Lo que me gustaría hacer en su lugar es usar un Dictionary<long,int>
donde el largo es el resultado de una función de hashing en la cadena.
Diccionario? –
Diadistis
Dudo que la posibilidad de colisiones sea realista con un hash de 64 bits. –
Me imagino que ese sea el caso también, pero simplemente 'cortar' los bytes a la mitad parece algo dudoso. –