【问题标题】:Deleting/ abandoning ASP.NET session state server删除/放弃 ASP.NET 会话状态服务器
【发布时间】:2015-04-13 18:47:42
【问题描述】:

我正在使用会话学习 ASP.Net 中的状态管理。 我最近使用了 proc ASP.Net 会话状态服务器来存储我的应用程序的会话数据。 我想知道的是,如果 asp.net 会话状态服务器中的会话被放弃,它会发生什么。 asp.net 会话状态服务器端如何管理内存。 我观察到的行为如下: 最初,在我的应用程序中创建会话之前,我通过 Windows 任务管理器检查了 asp.net 会话状态进程正在消耗的内存。大约 2300 KB。 然后我在我的应用程序中创建了一个会话,对其进行序列化并添加了大量数据,之后asp.net会话状态进程内存增加到大约4700 KB。 现在我尝试删除、清除和放弃(Session.Abandon())会话,但是 asp.net 会话状态进程消耗的内存并没有减少,它保持在 4300 左右。 你能告诉我是否有任何显式的内存管理步骤要遵循 out of proc 会话,还是我在这里遗漏了任何基本步骤。 asp.net 会话状态进程如何处理此内存?如果不是,我该如何管理?

【问题讨论】:

  • Abandon 方法实际上指示状态服务器释放对数据的所有引用,但是该进程没有任何义务立即将该内存返回给主机操作系统。当然,保留内存分配并在下次将某些内容存储在 Session 状态时重用它会更有效。
  • 我建议您在删除相同的对象图后再次存储相同的对象图后观察会话状态服务器内存会发生什么。我的钱说内存使用量将保持在 5MB 以下。
  • 也就是说,每个用户的会话状态应该只有 字节,当然不是兆字节的数据。
  • 它确实保持在 5 MB 以下。也感谢您的建议。

标签: c# asp.net session session-management session-state-server


【解决方案1】:

一旦您的数据不再有任何引用(包括 Session 对象),垃圾收集器就会清理它。

这是不确定的,所以你不知道什么时候会发生,但它最终会发生。

如果它从未发生过,那么您可能在某处对数据有其他引用。

【讨论】:

  • 感谢您的及时回复。我假设只有一个对基于会话标识符的请求操作的会话的引用,因此 session.Abandon 应该释放会话。我认为 Dai 所提到的详细解释了我为什么会面临这个问题。
  • 是的,Session.Abandon 应该释放对会话状态对象的引用,但是这些对象可能在其他地方被引用,因此永远不会被垃圾回收。这可能是也可能不是,我不知道:GC 是一个难以理解的野兽,实际上它可能需要很长时间才能启动并释放内存(甚至可能根本不这样做,除非系统中没有足够的可用内存用于您尝试分配的其他内容)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
相关资源
最近更新 更多