我试图找出特定会话状态的大小。在我们的一个大页面(表中有很多数据)上,它会逐渐变慢。通过退出系统即可解决该问题。

我已经分析了该页面以查找 JavaScript 内存泄漏,但我没有发现任何内容。我的下一个攻击计划是查看 ViewState 和 Session State。ViewState 很简单,但 Session State 提出了挑战。

有谁知道有什么技巧或工具可以帮助确定会话状态的大小?

编辑

会话状态是InProc。

有帮助吗?

解决方案

测量它:

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;
    }
}

此外,我相信,如果你启用跟踪它会显示您对会议的一些细节(不知道这一点,从来没有尝试过我自己)。

其他提示

有些人提到了 ASP.NET 跟踪,但我自己在这方面运气不佳。我可以查看跟踪信息,但会话部分从未填充。

不过,这里有一个有用的 文章来自 CodeProject 它使用 http 处理程序来查看当前会话(和缓存)。

对于这个问题,有两个问题:

  1. 当会话状态为InProc时,不会显示存储空间

    当Session State正在运行INPROC(在过程中),形成内容的实际对象未存储在集合中,仅参考对象。在这种情况下,这些对象“在”会话状态中占用的大小的数字将误导。

  2. 它用 BinaryFormatter 它“仅给出了会话数据大小的非常粗略的近似值”。这只是 ASP.NET“对 int、string、bool 等基本类型使用优化的内部格式化程序”的近似值

也就是说,我发现它很有用,并且我认为值得分享。为了分析大小,可能值得将会话状态推出进程。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top