如何从 Web 应用程序中找出 ASP.NET 中的会话大小?
GrZeCh
问问题
26561 次
4 回答
31
如果您试图在运行时而不是在调试跟踪中获取 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)
于 2008-10-13T17:42:09.633 回答
24
上面答案中的代码一直给我相同的数字。这是最终对我有用的代码:
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));
}
于 2011-03-16T19:07:15.083 回答
0
我认为您可以通过将Trace="true"添加到 aspx 页面的页面指令来找到该信息。然后,当页面加载时,您可以看到有关页面请求的大量详细信息,包括我认为的会话信息。
您还可以通过在 web.config 文件中添加一行来在整个应用程序中启用跟踪。就像是:
<trace enabled="true" requestLimit="10" pageOutput="true" traceMode="SortByTime"
localOnly="true"/>
于 2008-10-13T16:20:36.007 回答
0
这是我的代码,用于将所有当前会话变量及其大小(以 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
于 2020-10-16T08:32:14.397 回答