会话状态ASP.Net的配置文件内存使用情况

时间:2009-11-03 17:43:22

标签: asp.net memory session-state profile

我正试图找出特定会话状态的大小。在我们的一个重页(表中的大量数据)中,它逐渐变慢。通过注销系统解决了该问题。

我已经分析了寻找JavaScript内存泄漏的页面,但我没有找到任何内容。我的下一个攻击计划是查看ViewState和Session State。 ViewState很简单,但会话状态带来了挑战。

有没有人知道任何有助于弄清楚会话状态大小的技巧或工具?

修改

会话状态为InProc。

2 个答案:

答案 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处理程序来查看当前会话(和缓存)。

这个问题存在两个问题:

  1. 当会话状态为InProc

    时,它不会显示存储空间
      

    当会话状态运行InProc时   (在过程中)实际的对象   表单内容不存储在   集合,只参考   对象。大小的数字   这些对象在“会话”中占用   在这些情况下,国家会产生误导   情况。

  2. 它使用BinaryFormatter,其中“仅给出了会话数据大小的非常粗略的近似值”。它只是一个近似值,因为ASP.NET“使用优化的内部格式化程序来处理基本类型,如int,string,bool等”

  3. 那就是说,我发现它很有用,我觉得值得分享。将会话状态推出进行分析大小的过程可能是值得的。