【问题标题】:Intelligent Management of Large Session Values大型会话值的智能管理
【发布时间】:2013-11-27 01:04:34
【问题描述】:

我有一个包含类似“向导”的工作流程的应用程序,用户可以在其中编辑大量对象,一旦完成,他们可以选择保存或取消他们的编辑。鉴于对象的大小,将它们存储在客户端并往返它们是不可行的。相反,我们使用会话状态来存储对象,并使用 ajax 方法来检索/编辑它们。

我的问题是,如果用户选择在未完成此工作流的情况下离开当前页面,则对象集合将保留在会话中,直到会话过期或用户再次开始相同的工作流。鉴于可能有许多并发用户并且对象集合可能会变得相当大(即每个用户> 2MB),我担心这会导致不必要的内存消耗和潜在的性能下降。

当然还有其他不使用会话的方法(即写入临时表),但是,我想知道是否有一种方法可以智能地检测用户何时离开控制器,以便我可以执行某种操作的清理(删除不必要的会话变​​量)。

【问题讨论】:

    标签: c# asp.net asp.net-mvc session


    【解决方案1】:

    检测用户何时离开页面非常困难。虽然有一些选择,但最可靠的可能是轮询,这并不完美。例如,如果用户的连接中断了几秒钟,那么您可以清除他们的会话。

    如果向导之外的应用程序上的任何页面都有用户活动,您也不能只清除向导会话对象。如果用户打开多个选项卡/窗口,此解决方案将失败。

    如果可以在您的向导上放置一个计时器,那么我会设置一个管理器状态来按用户管理向导对象集合。该管理器将拥有每个对象的最后活动日期,并且您将设置一个滑动到期来清除在 X 分钟内没有活动的任何会话对象。

    此解决方案允许您编辑向导计时器的长度,以平衡用户需求和服务器资源。如果您的会话消耗过多内存,则减少滑动过期时间,反之亦然。

    【讨论】:

      猜你喜欢
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多