Tengo un escenario para optimizar la forma en que mi aplicación web almacena datos en la sesión y los recupero. Debo señalar que estoy usando SQL Server como mi tienda de sesiones.Sesión de ASP.NET: objeto grande frente a muchos objetos pequeños
Mi caso es que necesito almacenar una lista de identificadores únicos asignados a valores de cadena en la sesión del usuario para su uso posterior. El código actual que heredé usa un List<T>
con un objeto personalizado, pero ya puedo ver que algún tipo de diccionario es mucho mejor para el rendimiento.
He probado dos ideas alternativas:
Almacenamiento de un
Dictionary<int, string>
en la sesión. Cuando necesito recuperar las cuerdas, obtengo el diccionario de la sesión una vez y puedo probar cada ID en el objeto del diccionario.Como la sesión es básicamente como un diccionario en sí, almacene la cadena directamente en la sesión utilizando una clave de sesión única, p.
Session["MyString_<id>"] = stringValue"
. Obtener el valor de la sesión sería básicamente la operación inversa.
mis resultados muestran la siguiente función de la operación que necesito hacer y usar 100 cuerdas:
- Diccionario - 4552 bytes, 0,1071 segundos para hacer la operación
- Sesión directo - 4441 bytes , 0.0845 segundos para hacer la operación
De estos resultados veo que guardo algo de espacio en la sesión (probablemente porque no tengo la sobrecarga de serializar un diccionario obj ect) y parece ser más rápido al recuperar los valores de la sesión, tal vez porque las cadenas son más rápidas de deserializar que los objetos.
Así que mi pregunta es, ¿es mejor para el rendimiento almacenar muchos objetos más pequeños en la sesión en lugar de uno grande? ¿Hay alguna desventaja para almacenar muchos objetos más pequeños frente a un objeto más grande que no he visto?
te han encantado – Jonathan