分析会话状态 ASP.Net 的内存使用情况
-
13-09-2019 - |
题
我试图找出特定会话状态的大小。在我们的一个大页面(表中有很多数据)上,它会逐渐变慢。通过退出系统即可解决该问题。
我已经分析了该页面以查找 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 处理程序来查看当前会话(和缓存)。
对于这个问题,有两个问题:
当会话状态为InProc时,不会显示存储空间
当Session State正在运行INPROC(在过程中),形成内容的实际对象未存储在集合中,仅参考对象。在这种情况下,这些对象“在”会话状态中占用的大小的数字将误导。
它用
BinaryFormatter
它“仅给出了会话数据大小的非常粗略的近似值”。这只是 ASP.NET“对 int、string、bool 等基本类型使用优化的内部格式化程序”的近似值
也就是说,我发现它很有用,并且我认为值得分享。为了分析大小,可能值得将会话状态推出进程。
不隶属于 StackOverflow