2008-10-13 12 views

Odpowiedz

30

Jeśli próbujesz uzyskać rozmiaru sesji podczas wykonywania niż w debugowania śledzenia, może chcesz spróbować czegoś takiego:

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

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

+0

Dzięki. Tego właśnie potrzebowałem. – GrZeCh

+1

Potrzebowałem wprowadzić następujące zmiany: long totalSessionBytes = 0; ponieważ m.Length zwraca długi. Ale poza tym jest to miły, zwięzły kawałek kodu! Pętla może również zawierać foreach. ;-) – Oliver

+0

@Oliver Dzięki za informację zwrotną. Wprowadziłem poprawki, które zasugerowałeś. Wygląda teraz trochę ładniej. – ddc0660

0

Myślę, że możesz znaleźć te informacje, dodając Trace = "true" do dyrektywy strony strony aspx. Następnie po załadowaniu strony możesz zobaczyć dużą liczbę szczegółów dotyczących żądania strony, w tym informacje o sesji.

Możesz również włączyć śledzenie w całej aplikacji, dodając wiersz do pliku web.config. Coś jak:

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

Kod w powyższej odpowiedzi dawał mi ten sam numer. Oto kod, który w końcu zadziałał:

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

Powinieneś dodać czek, aby upewnić się, że obiekt nie jest pusty przed próbą serializacji. – kheld

+0

Nie chcę być małostkowy, ale rozmiar jest rzeczywiście w kB (kilobajtach), a nie kb (kilobity) :-) – Mikee

Powiązane problemy