2010-02-24 13 views
13

Estamos utilizando HttpRuntime.Cache API en ASP.NET para almacenar en caché los datos recuperados de una base de datos.Longitud máxima de claves de caché en el objeto HttpRuntime.Cache?

En este caso específico, nuestras consultas de bases de datos cuentan con un montón de parámetros, por lo que nuestras claves de caché tienen el siguiente aspecto:

tabla = tabla1; param1 = somevalue1; param2 = somevalue2; param3 = somevalue3; param4 = somevalue4; param5 = somevalue5; param6 = somevalue6 ... etc ...

Para algunas consultas, tenemos tantos parámetros que la clave de caché es de varios cientos de caracteres de longitud.

Mi pregunta: ¿existe un límite en la longitud de estas claves de caché? Internamente, utiliza un diccionario, por lo que, teóricamente, el tiempo de búsqueda debe ser constante. Sin embargo, me pregunto si tenemos potencial para encontrar algún problema de rendimiento/memoria.

Respuesta

19

Internamente, Dictionary utiliza el código hash de la clave que le da. Efectivamente, cada clave se almacena como un entero.

No tiene de qué preocuparse.

+0

Como un ejemplo extremo ... supongamos que mi clave de caché tiene un tamaño de 4 K. Esta es más información de la que se puede almacenar en un entero. ¿Cómo, entonces, se puede almacenar como un número entero y ser único? – frankadelic

+5

.NET utiliza un algoritmo hash para convertir cualquier cadena en un solo entero (algo así como MD5, excepto que el hash cabe en 4 bytes). Este algoritmo probablemente fue seleccionado por un equilibrio de velocidad y singularidad, pero ocurren colisiones hash. El diccionario maneja estas colisiones de forma automática. Para obtener detalles específicos, consulte la entrada de la tabla hash en wikipedia: http://en.wikipedia.org/wiki/Hash_table –