哪个更适合性能视图状态或会话

时间:2012-11-17 08:00:15

标签: asp.net session viewstate

我必须将数千条记录的数据存储在数据表中并在回发时进行维护。哪个选项适合我viewstate(我使用过)或session。当我使用viewstate时,它将创建隐藏字段以存储它并减慢页面加载速度。因此,在将其存储在会话中时,是否存在任何开销(服务器端内存消耗和响应中的延迟)。请建议我解决方案

1 个答案:

答案 0 :(得分:12)

对于大量数据,Session更有效率。如果您可以检测用户何时完成特定数据块,请将Session变量设置为null,以帮助释放内存开销。你不能总是这样做,但会话最终会到期,然后回收内​​存。降低会话超时可以帮助一些,但不要设置得太小,你不想切断你的用户。需要在Web.config文件中启用会话。

以下是Session与ViewState的基本指南:

ViewState:ViewState的二进制数据结构是Base64编码放置到页面中,这意味着它是原始二进制数据大小的1.3333倍(8/6)。为每个页面视图上载和下载此数据。因此,如果您在ViewState中有很多,它会影响页面响应时间。 Base64编码可能已经过高度优化,因此不会影响性能。每个页面请求将分配,然后释放ViewState的空间,因此它不是长期内存命中。由于数据在页面中,因此不会过期。

会话:会话中的所有数据都在页面加载之间保留在Web服务器中。这使页面保持较小,只需携带会话标识符。在不利方面,用于在会话中存储数据的任何内存将保持分配,直到会话到期为止。我想知道会话是复制二进制数据还是只保留一个指针。与Base64编码一样,这可以进行高度优化,因此如果发生这种情况,则不会影响性能。如果用户在页面浏览之间等待太长时间,则会话可能会过期。如果会话过期,它应该将用户返回到网页中的某个已知状态。

此处的另一个问题是,如果您在会话中存储信息,则会话ID可以在客户端浏览器中的多个选项卡之间共享。您必须小心如何使用会话中存储的数据。请确保对此进行测试,以免您的用户获得意外结果。

(注意:使用ViewState是RESTful,Session不是。)