2008-10-13 30 views

Trả lời

30

Nếu bạn đang cố gắng để có được kích thước của phiên trong thời gian chạy hơn là trong debug truy tìm, bạn có thể muốn thử một cái gì đó như thế này:

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

(Lấy cảm hứng từ http://www.codeproject.com/KB/session/exploresessionandcache.aspx)

+0

Cảm ơn. Đó là những gì tôi cần. – GrZeCh

+1

Tôi cần thực hiện các thay đổi sau: tổng dàiSessionBytes = 0; kể từ m.Length trả về một thời gian dài. Nhưng ngoài việc đó là một đoạn mã ngắn gọn! Vòng lặp có thể được foreach, là tốt. ;-) – Oliver

+0

@Oliver Cảm ơn phản hồi. Tôi đã thực hiện các điều chỉnh mà bạn đã đề xuất. Trông đẹp hơn một chút. – ddc0660

0

Tôi nghĩ bạn có thể tìm thông tin đó bằng cách thêm Dấu vết = "true" vào chỉ thị trang của trang aspx. Sau đó, khi tải trang, bạn có thể thấy một số lượng lớn các chi tiết liên quan đến yêu cầu trang, bao gồm thông tin về phiên tôi nghĩ.

Bạn cũng có thể bật theo dõi trong toàn bộ ứng dụng của mình bằng cách thêm một dòng vào tệp web.config của bạn. Một cái gì đó như:

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

Mã trong câu trả lời ở trên tiếp tục cho tôi cùng một số. Đây là mã cuối cùng đã làm việc cho tôi:

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

Bạn nên thêm một kiểm tra để đảm bảo rằng đối tượng không phải là null trước khi cố gắng tuần tự hóa. – kheld

+0

Tôi không muốn nhỏ, nhưng kích thước thực sự là kB (kilobyte), không phải kb (kilobits) :-) – Mikee

Các vấn đề liên quan