[英]How to find out size of session in ASP.NET from web application?
如何從 Web 應用程序中找出 ASP.NET 中的會話大小?
如果您想在運行時而不是在調試跟蹤中獲取 Session 的大小,您可能想嘗試這樣的事情:
long totalSessionBytes = 0;
BinaryFormatter b = new BinaryFormatter();
MemoryStream m;
foreach(var obj in Session)
{
m = new MemoryStream();
b.Serialize(m, obj);
totalSessionBytes += m.Length;
}
(靈感來自http://www.codeproject.com/KB/session/exploresessionandcache.aspx )
上面答案中的代碼一直給我相同的數字。 這是最終對我有用的代碼:
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));
}
我認為您可以通過將Trace="true"添加到 aspx 頁面的頁面指令來找到該信息。 然后當頁面加載時,您可以看到大量有關頁面請求的詳細信息,包括我認為的會話信息。
您還可以通過在 web.config 文件中添加一行來在整個應用程序中啟用跟蹤。 就像是:
<trace enabled="true" requestLimit="10" pageOutput="true" traceMode="SortByTime"
localOnly="true"/>
這是我的代碼,用於將所有當前會話變量及其大小(以 kB 為單位)放入字典中。
// <KEY, SIZE(kB)>
var dict = new Dictionary<string, decimal>();
BinaryFormatter b = new BinaryFormatter();
MemoryStream m;
foreach(string key in Session.Keys)
{
var obj = Session[key];
if (obj == null)
{
dict.Add(key, -1);
}
else
{
m = new MemoryStream();
b.Serialize(m, obj);
//save the key and size in kB (rounded to two decimals)
dict.Add(key, Math.Round(Convert.ToDecimal(m.Length) / 1024, 2));
}
}
//return dict
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.