3

在用户最初与 ASP.NET 建立会话后,对于每个后续 HTTP 请求,有多少 StateServer 会话对象会立即自动获取和反序列化?例如:

  1. 是否在收到请求并重新建立会话时获取所有会话对象,或者...
  2. 会话重新建立后,会话对象是否会在每次对 HttpContext.Session["..."] 的请求时单独获取和反序列化?

答案对我如何使用会话有巨大的影响。例如,如果我已将大量用户数据预取到会话中,并且 StateServer 会话在每个 HTTP 请求时完全反序列化,那么我将体验到明显的性能损失。但是,如果仅在我请求特定会话密钥时才对预取的用户数据进行反序列化,那么对我来说就不用担心了。

更新 在标记了这个问题的答案后,我发现带有 AppFabric Server 1.1 的 ASP.NET 可以选择按需恢复会话而不是 all-at-once。这由web.config 中的useBlobMode控制。

4

1 回答 1

1

Session首次加载页面时加载所有用户Session信息。然后在页面完成处理后将用户会话信息持久化回存储区。

您可以通过 MSDN 更好地了解自定义状态存储实现

这是您应该尽可能少使用 Session 的一个主要原因,因为它的处理成本很高(无论是在数据存储的往返传输以及在页面请求的生命周期内将数据保存在内存中) )。

于 2013-02-21T04:54:11.220 回答