当请求从用户会话获取对象时,是否会加载整个会话?

时间:2009-09-03 17:40:02

标签: asp.net session-state

我正在尝试理解何时可以将某些对象放入用户会话中,并且想知道如何存储会话以及从中检索值。如果我发出从会话状态拉出密钥A的请求,它还会读取密钥B吗?

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

因此,如果我的状态是20KB并且我想从它获得一个5KB的值,那么它将读取所有20KB还是只需要我需要的5KB?

2 个答案:

答案 0 :(得分:2)

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

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

然而,管理这个有几个选项,你可以在这里找到一个很好的参考:

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

答案 1 :(得分:0)

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

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