有人建议 ViewState 中使用的键的大小会导致性能问题,因为视图状态的大小会更大,因此会增加页面大小,从而增加渲染。
虽然我可以看到较大的键可能会导致视图状态大小的增加,但我不确定影响是否如此显着。
例如,确实会ViewState["MySpecialProperty"]
导致 ViewState 比ViewState["x"]
? 如果确实如此,那么差异是否真的足以成为标准网络应用程序中的一个问题。
有人建议 ViewState 中使用的键的大小会导致性能问题,因为视图状态的大小会更大,因此会增加页面大小,从而增加渲染。
虽然我可以看到较大的键可能会导致视图状态大小的增加,但我不确定影响是否如此显着。
例如,确实会ViewState["MySpecialProperty"]
导致 ViewState 比ViewState["x"]
? 如果确实如此,那么差异是否真的足以成为标准网络应用程序中的一个问题。
viewstate 键的长度确实会影响 viewstate 的大小。然而,它只是最小的。从我在“MySpecialProperty”与“x”上进行的小型测试中,差异有 20 个左右的字符。如果您有更长的密钥,也不是它可以加起来。
但是,您应该关注存储在视图状态中的值而不是键,因为这将消耗更多空间。
一些参考资料:
例如,ViewState["MySpecialProperty"] 会导致比 ViewState["x"] 更大的 ViewState 吗?
是的,ViewState
随着键/值对的编码,结果会更大。
这种差异真的足以成为标准 Web 应用程序中的一个问题吗?
国际海事组织,没有。我会更担心您放入了多少对,ViewState
以及您是否真的需要将该信息传递给客户。
嗯,是的,它会影响 ViewState 的大小,正如您提到的,如果您只向 ViewState 添加一个变量,这并不重要,另一方面,如果您开始编写变量,例如x
,阅读代码会很痛苦,所以更好地平衡有利于代码的可读性
在考虑这样的事情以提高性能之前,请创建一些负载测试并根据结果做出正确的决定。
ASPX 页面的性能非常重要,看看 8 秒规则
但是,您可以尝试以其他方式提高与 ViewState 相关的性能,基本上,为不需要它的控件禁用 ViewState
了解更多信息:
http://www.guidanceshare.com/wiki/ASP.NET_2.0_Performance_Guidelines_-_View_State
直奔马口:msdn viewstate
...默认情况下,页面的视图状态位于名为 __VIEWSTATE 的隐藏表单字段中。这个隐藏的表单域很容易变得非常大,大约几十千字节。不仅 __VIEWSTATE 表单域会导致下载速度变慢,而且每当用户回发网页时,这个隐藏的表单域的内容必须在 HTTP 请求中回发,从而延长了请求时间,以及...
观看状态的成本
没有什么是免费的,视图状态也不例外。每当请求 ASP.NET 网页时,ASP.NET 视图状态都会对性能造成两个影响:
- 在所有页面访问中,在保存视图状态阶段,Page 类为其控件层次结构中的所有控件收集集体视图状态,并将状态序列化为 base-64 编码字符串。(这是在隐藏的 __VIEWSTATE 表单字段中发出的字符串。)类似地,在回发时,加载视图状态阶段需要反序列化持久化的视图状态数据,并更新控件层次结构中的相关控件。
- __VIEWSTATE 隐藏表单域为客户端必须下载的网页增加了额外的大小。对于某些视图状态繁重的页面,这可能是数十千字节的数据,调制解调器用户可能需要几秒钟(或几分钟!)才能下载。此外,回发时,__VIEWSTATE 表单字段必须在 HTTP POST 标头中发送回 Web 服务器,从而增加了回发请求时间。
如果您正在设计一个通常由通过调制解调器连接的用户访问的网站,您应该特别关注视图状态可能会添加到页面的膨胀。幸运的是,有许多技术可以用来减少视图状态的大小。我们将首先了解如何选择性地指示服务器控件是否应保存其视图状态。如果控件的状态不需要在回发中持久化,我们可以关闭该控件的视图状态跟踪,从而节省该控件原本会添加的额外字节。接下来,我们将研究如何从页面的隐藏表单字段中完全移除视图状态,将视图状态存储在 Web 服务器的文件系统中。
从这里:
默认情况下,视图状态数据存储在页面中的隐藏字段中,并使用 base64 编码进行编码。此外,视图状态数据的散列是通过使用机器验证码 (MAC) 密钥从数据创建的。哈希值被添加到编码的视图状态数据中,结果字符串存储在页面中。
因此,逐字节计算,是的,当您使用更长的键进行输入时,您的视图状态会更长,因为应该将更多字符转换为 base64。但这从来都不是一个大问题,因为与数据长度的大小相比,密钥的大小(通常)非常小。