2008-10-13 36 views

Respuesta

30

Si usted está tratando de obtener el tamaño de la sesión durante el tiempo de ejecución y no en el seguimiento de depuración, es posible que desee probar algo como esto:

long totalSessionBytes = 0; 
BinaryFormatter b = new BinaryFormatter(); 
MemoryStream m; 
foreach(var obj in Session) 
{ 
    m = new MemoryStream(); 
    b.Serialize(m, obj); 
    totalSessionBytes += m.Length; 
} 

(Inspirado por http://www.codeproject.com/KB/session/exploresessionandcache.aspx)

+0

Gracias. Eso era lo que necesitaba. – GrZeCh

+1

Necesitaba hacer los siguientes cambios: long totalSessionBytes = 0; ya que m.Length devuelve un largo. ¡Pero aparte de eso, es una buena pieza concisa de código! El ciclo también puede ser foreach. ;-) – Oliver

+0

@Oliver Gracias por los comentarios. Hice los ajustes que sugeriste. Se ve un poco mejor ahora. – ddc0660

0

Creo que puede encontrar esa información agregando Trace = "true" a la directiva de la página de una página aspx. Luego, cuando se carga la página, puede ver una gran cantidad de detalles sobre la solicitud de la página, incluida la información de la sesión, creo.

También puede habilitar el seguimiento en toda su aplicación agregando una línea a su archivo web.config. Algo así como:

<trace enabled="true" requestLimit="10" pageOutput="true" traceMode="SortByTime" 
localOnly="true"/> 
16

El código en la respuesta anterior me sigue dando el mismo número. Aquí está el código que finalmente funcionó para mí:

private void ShowSessionSize() 
{ 
    Page.Trace.Write("Session Trace Info"); 

    long totalSessionBytes = 0; 
    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter b = 
     new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 
    System.IO.MemoryStream m; 
    foreach (string key in Session) 
    { 
     var obj = Session[key]; 
     m = new System.IO.MemoryStream(); 
     b.Serialize(m, obj); 
     totalSessionBytes += m.Length; 

     Page.Trace.Write(String.Format("{0}: {1:n} kb", key, m.Length/1024)); 
    } 

    Page.Trace.Write(String.Format("Total Size of Session Data: {0:n} kb", 
     totalSessionBytes/1024)); 
} 
+1

Debe agregar una marca de verificación para asegurarse de que el objeto no sea nulo antes de tratar de serializar. – kheld

+0

No quiero ser mezquino, pero el tamaño es en realidad en kB (kilobytes), no kb (kilobits) :-) – Mikee

Cuestiones relacionadas