Como determinar el tamaño de los objetos en Session State en una aplicacion de ASP.NET
En el proyecto en el que estoy asignado actualmente, trabajamos en una aplicacion financiera (ASP.NET WebForms) muy grande. Utilizada en varios paises por miles de usuarios, siempre estamos buscando optimizar la aplicacion lo mas que podamos.
El caso de este post en especifico, es que notamos que habia muchos objetos almacenados en Session State y teniamos curiosidad de saber el tamaño que esos objetos estaban ocupando, para saber si era un area que debiamos optimizar. En la actualidad, la memoria RAM es de los componentes mas baratos y una de las maneras mas faciles de mejorar el desempeño de una aplicacion, pero si acaso una empresa, aplicacion o equipo esta limitado en presupuesto, igual es un area que se puede mejorar.
Como siempre, en StackOverflow.com ya habia alguien que habia tenido la misma duda que nosotros, y pudimos obtener un metodo que serializa a disco los contenidos de la sesion para poder medir su tamaño. Este es el metodo:
protected void PrintSessionSize() { long totalSessionBytes = 0; var b = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); System.IO.MemoryStream m; foreach (var obj in HttpContext.Current.Session) { m = new System.IO.MemoryStream(); b.Serialize(m, obj); totalSessionBytes += m.Length; } }
Espero que les sirva.