2008-10-13 6 views

Antwort

30

Wenn Sie versuchen, die Größe der Session während der Laufzeit zu bekommen, anstatt im Debug-Tracing, möchten Sie vielleicht etwas versuchen:

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

(Inspiriert von http://www.codeproject.com/KB/session/exploresessionandcache.aspx)

+0

Danke. Das war, was ich brauchte. – GrZeCh

+1

Ich musste folgende Änderungen vornehmen: long totalSessionBytes = 0; seit m.Length gibt eine lange zurück. Aber abgesehen davon ist es ein nettes, prägnantes Stück Code! Die Schleife kann auch foreach sein. ;-) – Oliver

+0

@Oliver Danke für die Rückmeldung. Ich habe die von Ihnen vorgeschlagenen Anpassungen vorgenommen. Sieht jetzt ein bisschen schöner aus. – ddc0660

0

Ich denke, Sie können diese Informationen finden, indem Sie Trace = "true" auf die Seiten-Direktive einer Aspx-Seite hinzufügen. Dann, wenn die Seite geladen wird, können Sie eine große Anzahl von Details bezüglich der Seitenanfrage sehen, einschließlich Sitzungsinformationen, denke ich.

Sie können die Ablaufverfolgung auch in Ihrer gesamten Anwendung aktivieren, indem Sie der Datei web.config eine Zeile hinzufügen. Etwas wie:

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

Der Code in der Antwort oben gab mir die gleiche Nummer. Hier ist der Code, der endlich für mich funktioniert hat:

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

Sie sollten eine Überprüfung hinzufügen, um sicherzustellen, dass das Objekt vor dem Serialisieren nicht null ist. – kheld

+0

Ich möchte nicht kleinlich sein, aber die Größe ist eigentlich in kB (Kilobyte), nicht kb (Kilobit) :-) – Mikee

Verwandte Themen