我正试图找出特定会话状态的大小。在我们的一个重页(表中的大量数据)中,它逐渐变慢。通过注销系统解决了该问题。
我已经分析了寻找JavaScript内存泄漏的页面,但我没有找到任何内容。我的下一个攻击计划是查看ViewState和Session State。 ViewState很简单,但会话状态带来了挑战。
有没有人知道任何有助于弄清楚会话状态大小的技巧或工具?
修改
会话状态为InProc。
答案 0 :(得分:6)
测量它:
int totalBytes;
var formatter = new BinaryFormatter();
for(int i = 0; i < Session.Count; i++)
{
using (var stream = new MemoryStream())
{
formatter.Serialize(stream, Session[i]);
stream.Flush();
totalBytes += stream.Length;
}
}
另外我相信,如果你enable tracing它会向你显示有关会话的一些细节(不确定这一点,我自己也没试过)。
答案 1 :(得分:1)
有些人提到过ASP.NET跟踪,但我自己也没有多少运气。我可以查看跟踪信息,但从未填充会话部分。
但是,这是一个有用的article from CodeProject,它使用http处理程序来查看当前会话(和缓存)。
这个问题存在两个问题:
当会话状态为InProc
时,它不会显示存储空间当会话状态运行InProc时 (在过程中)实际的对象 表单内容不存储在 集合,只参考 对象。大小的数字 这些对象在“会话”中占用 在这些情况下,国家会产生误导 情况。
它使用BinaryFormatter
,其中“仅给出了会话数据大小的非常粗略的近似值”。它只是一个近似值,因为ASP.NET“使用优化的内部格式化程序来处理基本类型,如int,string,bool等”
那就是说,我发现它很有用,我觉得值得分享。将会话状态推出进行分析大小的过程可能是值得的。