【问题标题】:When a request is made to get an object from a users session, does the entire session get loaded?当请求从用户会话中获取对象时,是否会加载整个会话?
【发布时间】:2009-09-04 01:54:23
【问题描述】:

我试图了解何时可以将某些对象放入用户会话中,并且想知道如何存储会话以及如何从中检索值。如果我请求从会话状态中提取密钥 A,它是否也会读取密钥 B?

我知道 viewstate 被存储为一个大对象,我不会假设一旦它被完全加载,它就会从我的代码中访问。这是否与会话状态数据类似,还是仅加载从服务器请求的密钥。

因此,如果我的状态是 20KB,并且我想从中获取 5KB 的值,它将读取全部 20KB 还是仅读取我需要的 5KB?

【问题讨论】:

    标签: asp.net session-state


    【解决方案1】:

    默认情况下,会话状态存储在内存中,直到会话到期(给定用户的一段时间不活动)。视图状态根本不存储在请求之间,而是作为隐藏的表单字段实际发送到页面。此数据会在后续请求中发送回服务器。

    为了回答您的问题,默认行为是整个会话已加载,因此无论您是否实际访问它,它都在内存中。

    不过,有多种管理方法,您可以在此处找到一个很好的参考:

    http://msdn.microsoft.com/en-us/library/z1hkazw7.aspx

    【讨论】:

    • ViewState 被放置在隐藏字段中,而不是 Session State。会话状态保留在服务器的内存中,这就是为什么在使用服务器场时,如果用户在后续请求中被退回到另一台服务器,或者刷新服务器应用程序池时,会话可能会丢失。
    【解决方案2】:

    默认情况下,用户会话存储在内存中。您可以将其配置为存储在数据库中,但它是序列化的,并在重新实例化时完全读出。

    所以是的,如果您的用户会话中有 20KB 的数据,它将始终使用 20KB 的内存。

    【讨论】:

      猜你喜欢
      • 2020-06-06
      • 1970-01-01
      • 2013-07-16
      • 2021-10-22
      • 2013-08-18
      • 2010-10-14
      • 2014-08-05
      • 2017-05-04
      • 1970-01-01
      相关资源
      最近更新 更多