有人建议,ViewState中使用的键的大小会导致性能问题,因为视图状态的大小会更大,因此会增加页面大小,从而增加渲染。
虽然我可以看到更大的密钥可能导致视图状态大小增加的情况,但我不确定影响是否显着。
例如,ViewState["MySpecialProperty"]
会导致ViewState大于ViewState["x"]
吗?如果确实如此,差异真的非常重要,足以成为标准网络应用程序中的一个问题。
答案 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网页时,视图状态都会产生两次性能命中 请求:
- 在所有页面访问中,在保存视图状态阶段,Page类收集其中所有控件的集合视图状态 控制层次结构并将状态序列化为base-64编码 串。 (这是隐藏的__VIEWSTATE中发出的字符串 同样,在回发时,加载视图状态阶段需要 反序列化持久化的视图状态数据,并更新相关的数据 控制层次中的控件。
- __VIEWSTATE隐藏表单字段会为客户端必须下载的网页添加额外的大小。对于一些查看状态繁重的页面,这个 可以是几十千字节的数据,这可能需要几个额外的数据 调制解调器用户下载的秒数(或分钟!)另外,发帖时 返回时,必须将__VIEWSTATE表单字段发送回Web服务器 在HTTP POST标头中,从而增加了回发请求 时间。
醇>如果您正在设计一个通常由用户访问的网站 通过调制解调器连接,你应该特别关注 视图状态可能会添加到页面的膨胀。幸运的是,那里 可以采用多种技术来减少视图状态 尺寸。我们将首先看看如何有选择地指出是否 服务器控件应保存其视图状态。如果一个控件的状态 不需要在回发中持久化,我们可以关闭视图状态 跟踪该控件,从而节省额外的字节 否则已由该控件添加。在那之后,我们会 检查如何从页面的隐藏表单中删除视图状态 完全将字段存储在Web服务器上 文件系统。
答案 3 :(得分:1)
来自here:
默认情况下,视图状态数据存储在页面中的隐藏字段中 并使用base64编码进行编码。另外,视图的哈希 通过使用机器身份验证从数据创建状态数据 代码(MAC)密钥。散列值被添加到编码的视图状态数据 结果字符串存储在页面中。
因此逐字节计算,是的,当您为条目使用更长的密钥时,您的视图状态会更长,因为应将更多字符转换为base64。但这绝不是一个大问题,因为密钥的大小与数据长度的大小相比(通常)非常小。
答案 4 :(得分:1)
viewstate键的长度确实会影响viewstate的大小。然而,这只是最小的。从我在'MySpecialProperty'和'x'上做的小测试,差异大约是20个字符。如果你有更长的键,它也不会加起来。
但是,您应该关注存储在viewstate中的值而不是键,因为这会占用更多空间。
一些参考文献: