加载

时间:2016-04-20 09:45:38

标签: asp.net session iis session-state

this question中,有一些评论与一些赞成声明:

  

已知InProc会话状态在负载下非常不稳定。如果它被滥用(一直发生),那么Session [" foo"] = null将比Session.Remove [" foo"]表现得更好。垃圾收集器应该清理过多会话变量的混乱

这让我很担心,因为我的所有网络应用都会大量使用会话状态(帐户信息,购物篮,付款细节,用户偏好等)。

我似乎无法找到支持这种说法的任何证据,有人可以揭穿或解释为什么这是正确的。我在会话中存储此类信息是错误的吗?我不是在寻找InProc与SQL的利弊,我知道这些差异。

我的所有应用都在单个或专用的网络服务器上运行,所以我从来没有看到过为SQL会话状态转移到SQL的任何好处或重点。

1 个答案:

答案 0 :(得分:2)

InProc会话状态稳定,您不必担心。我不知道为什么他称之为不稳定,但我猜他在评论时可能会想到以下原因之一:

  • 如果您的应用程序负载过重;当你扩展它时,你必须使用粘性会话(对于InProc SessionState)将请求重定向到客户端的同一服务器,否则会话对象将不会持久存在。
  • 如果应用程序存在内存泄漏或不一致,则重负载很可能会触发应用程序重置,这将导致所有会话数据丢失,以便当前用户可以使用。活动页面可能会因为会话数据丢失而出错。
  • 会话对象被锁定为整个请求(仅限该用户),以防止多个页面写入会话,以便例如,如果发出并发请求,则必须等待彼此将数据写入会话。但它在SQL和InProc SessionState中都会发生。

我看到银行应用程序与InProc SessionState一起工作,并没有什么不稳定的。