在会话或数据库中存储Viewstate的缺陷是什么

时间:2009-04-30 18:30:49

标签: c# asp.net

我已经读过你可以做到这一点,但这会真正提高页面的性能,还是会带来更多的性能开销?

2 个答案:

答案 0 :(得分:6)

以下是Scott Hanselman关于在Session对象中存储ViewState信息的好文章:

Moving ViewState to the Session Object and more Wrongheadedness

答案 1 :(得分:3)

Viewstate数据是有关页面的信息,该页面已加密并序列化为页面上的隐藏标记。

如果你可以将它存储在会话中,这些是一些问题/陷阱:

  • 信息仍然必须从内存中加密/解密和序列化/反序列化
  • 如果你有很多用户并且你的会话数据存储在进程中或甚至使用状态服务器,那么你将使用viewstate数据来最大化这些服务器上的内存。
  • 如果您使用SQL Server进行会话状态,这显然会变得更糟(见下文)。

如果你可以将它存储在SQL Server中,这些将是一些问题:

  • 同样,信息仍然需要序列化/反序列化(不一定要加密/解密,因为它不会输出到页面),但在这种情况下,必须从SQL DB读取/写入。在从/向数据库读取/写入数据时,对于DB / I / O的传输都会产生开销。