viewstate键的长度是否会影响viewstate的大小?

时间:2012-07-06 00:21:18

标签: c# asp.net performance viewstate

有人建议,ViewState中使用的键的大小会导致性能问题,因为视图状态的大小会更大,因此会增加页面大小,从而增加渲染。

虽然我可以看到更大的密钥可能导致视图状态大小增加的情况,但我不确定影响是否显着。

例如,ViewState["MySpecialProperty"]会导致ViewState大于ViewState["x"]吗?如果确实如此,差异真的非常重要,足以成为标准网络应用程序中的一个问题。

5 个答案:

答案 0 :(得分:1)

  

作为一个例子,ViewState [“MySpecialProperty”]会产生比ViewState [“x”]更大的ViewState吗?

是的,随着键/值对的编码,结果ViewState会更大。

  

差异真的非常重要,足以成为标准网络应用中的一个问题吗?

IMO,没有。我更担心你在ViewState中放了多少对,以及你是否真的需要将这些信息传递给客户。

答案 1 :(得分:1)

是的,它会影响ViewState的大小,正如你所提到的那样,如果你只向ViewState添加一个变量并不重要,另一方面,如果你开始编写像x这样的变量。阅读代码将是一件痛苦的事情,所以最好有一个平衡有利于代码的可读性

在考虑这样的事情来提高性能之前,先创建一些负载测试,并根据结果做出正确的决定。

ASPX页面的性能非常重要,take a look to the 8 seconds rule

但是,您可以尝试以其他方式提高与ViewState相关的性能,基本上,为不需要它的控件禁用ViewState

了解更多信息:

http://www.guidanceshare.com/wiki/ASP.NET_2.0_Performance_Guidelines_-_View_State

答案 2 :(得分:1)

直接从马口:msdn viewstate

  

...默认情况下,页面的视图状态位于名为__VIEWSTATE的隐藏表单字段中。这个隐藏的表单字段很容易变得非常大,大约几十千字节。 __VIEWSTATE表单字段不仅会导致下载速度变慢,而且每当用户回发网页时,此隐藏表单字段的内容都必须在HTTP请求中回发,从而延长请求时间...... / p>      

查看费用状态

     

没有任何东西是免费的,观点状态也不例外。 ASP.NET   每当ASP.NET网页时,视图状态都会产生两次性能命中   请求:

     
      
  1. 在所有页面访问中,在保存视图状态阶段,Page类收集其中所有控件的集合视图状态   控制层次结构并将状态序列化为base-64编码   串。 (这是隐藏的__VIEWSTATE中发出的字符串   同样,在回发时,加载视图状态阶段需要   反序列化持久化的视图状态数据,并更新相关的数据   控制层次中的控件。
  2.   
  3. __VIEWSTATE隐藏表单字段会为客户端必须下载的网页添加额外的大小。对于一些查看状态繁重的页面,这个   可以是几十千字节的数据,这可能需要几个额外的数据   调制解调器用户下载的秒数(或分钟!)另外,发帖时   返回时,必须将__VIEWSTATE表单字段发送回Web服务器   在HTTP POST标头中,从而增加了回发请求   时间。
  4.         

    如果您正在设计一个通常由用户访问的网站   通过调制解调器连接,你应该特别关注   视图状态可能会添加到页面的膨胀。幸运的是,那里   可以采用多种技术来减少视图状态   尺寸。我们将首先看看如何有选择地指出是否   服务器控件应保存其视图状态。如果一个控件的状态   不需要在回发中持久化,我们可以关闭视图状态   跟踪该控件,从而节省额外的字节   否则已由该控件添加。在那之后,我们会   检查如何从页面的隐藏表单中删除视图状态   完全将字段存储在Web服务器上   文件系统。

答案 3 :(得分:1)

来自here

  

默认情况下,视图状态数据存储在页面中的隐藏字段中   并使用base64编码进行编码。另外,视图的哈希   通过使用机器身份验证从数据创建状态数据   代码(MAC)密钥。散列值被添加到编码的视图状态数据   结果字符串存储在页面中。

因此逐字节计算,是的,当您为条目使用更长的密钥时,您的视图状态会更长,因为应将更多字符转换为base64。但这绝不是一个大问题,因为密钥的大小与数据长度的大小相比(通常)非常小。

答案 4 :(得分:1)

viewstate键的长度确实会影响viewstate的大小。然而,这只是最小的。从我在'MySpecialProperty'和'x'上做的小测试,差异大约是20个字符。如果你有更长的键,它也不会加起来。

但是,您应该关注存储在viewstate中的值而不是键,因为这会占用更多空间。

一些参考文献: