InProc 会话状态在负载下是否不稳定

Is InProc Session State unstable under load

this question 中有一条带有一些赞成票的评论指出:

InProc session state is known to be highly unstable under load. If it's abused (happens all the time), then Session["foo"] = null will perform better than Session.Remove["foo"]. The garbage collector should clean up the mess of excessive session variables

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

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

我所有的应用程序 运行 都在一个或专用的网络服务器上,所以我从未发现将会话状态迁移到 SQL 有任何好处或意义。

InProc Session状态稳定,不用担心。我不知道他为什么说它不稳定,但我猜他在评论时可能想到了以下原因之一:

  • 如果您的应用程序负载过大;当你缩放它时,你必须使用粘性 session (对于 InProc SessionState)将请求重定向到客户端的同一服务器,否则 session object 不会持续.
  • 如果应用程序有内存泄漏或不一致,重负载很可能会触发应用程序重置,这将导致所有 session 数据丢失,因此当前用户的活动页面可能会因为他们的session 数据丢失。
  • Session object 被整个请求锁定(仅针对该用户),以防止多个页面写入 session,这样如果同时发出请求,他们必须等待对方将数据写入 Session。但它同时发生在 SQL 和 InProc SessionState.

我看到了使用 InProc SessionState 的银行应用程序,它没有任何不稳定的地方。