Domanda

Come scoprire la dimensione della sessione in ASP.NET dall'applicazione web?

È stato utile?

Soluzione

Se stai cercando di ottenere la dimensione di Session durante il runtime piuttosto che nella traccia di debug, potresti provare qualcosa del genere:

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

(Ispirato da http://www.codeproject.com/KB/session/exploresessionandcache aspx )

Altri suggerimenti

Il codice nella risposta sopra continuava a darmi lo stesso numero. Ecco il codice che finalmente ha funzionato per me:

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));
}

Penso che puoi trovare queste informazioni aggiungendo Trace = " true " alla direttiva sulla pagina di una pagina aspx. Quindi quando la pagina viene caricata puoi vedere un gran numero di dettagli riguardanti la richiesta della pagina, comprese le informazioni sulla sessione che penso.

È inoltre possibile abilitare la traccia nell'intera applicazione aggiungendo una riga al file web.config. Qualcosa del tipo:

<trace enabled="true" requestLimit="10" pageOutput="true" traceMode="SortByTime" 
 localOnly="true"/>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top