【问题标题】:ASP.net session variables information required需要 ASP.net 会话变量信息
【发布时间】:2018-05-21 07:17:14
【问题描述】:

我有一个 ASP.net WebForms 应用程序。我在我的应用程序中使用了会话变量。我需要获取 aspx.cs 页面上的会话变量使用的内存。我怎么做。首先,我知道我可以像这样完成它。

int totalSessionBytes;
BinaryFormatter b = new BinaryFormatter();
MemoryStream m;
b.Serialize(m, Session["table1"]);
totalSessionBytes = m.Length;

除此之外还有其他合适的方式吗?我的一些会话变量还保存了 DataTables。我是否能够捕获此类会话变量的内存?

【问题讨论】:

    标签: asp.net session-variables


    【解决方案1】:

    只有在使用 InProc 存储时才能获取会话存储使用的总内存 - 如果您使用 Redis 或 SQL-Server 等会话状态的外部存储,则答案为零.

    您提出的方法将至少 加倍 会话状态的明显内存使用量,因为您正在执行复制(序列化数据!)到 MemoryStream 其父 Byte[] 和那么你永远不会Dispose它,让GC之神来决定何时降低你的内存压力。您的方法也只返回当前用户会话状态的数据,而不是所有用户的数据。

    如果您考虑诸如 String Interning 之类的问题(其中 .NET 运行时中的相同字符串值由多个字符串引用共享),问题也会变得复杂 - 因为这些字符串值可能由不同用户的不同会话状态共享。

    准确了解正在使用多少内存的唯一方法是使用内存分析工具,如 JetBrains dotMemoryMemProfiler 或 WinDBG 和 Visual Studio 的诊断工具窗口中的 CLR/GC 分析工具。

    【讨论】:

      猜你喜欢
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      相关资源
      最近更新 更多