ASP.NET 中的 ViewState <转>

来源:互联网 发布:印度撤军知乎 编辑:程序博客网 时间:2024/05/18 05:01

之前在做一些基于.NET WEB 应用的性能测试时,测试工具经常会录制到 __VIEWSTATE 这个隐藏的属性,并且经常发现这个属性在“关联”时会存在一些问题,导致请求失败;有时这个属性的值还会非常的长——例如超过2000字节,还一遍遍的在脚本中重复出现,严重影响脚本的可读性。

所以一般都会在web.config中禁用这个东东,不过也的确没有深入研究一下这个东西到底是干嘛的,为什么会出现,禁用到底对测试的真实性有什么影响。

今天有点空,找到一篇比较权威的资料,了解了一下。

ASP.NET ViewState初探 http://www.microsoft.com/china/community/program/originalarticles/techdoc/viewstate.mspx

下面是一点摘要。

-------------- BEGIN ---------------

ViewState(英文)是一种机制,ASP.NET 使用这种机制来跟踪服务器控件状态值,否则这些值将不作为 HTTP 窗体的一部分而回传。
ASP.NET ViewState 是一种新的状态服务,可供开发人员基于每个用户来跟踪 UI 状态。ViewState 没有什么神秘之处,它只是利用了一个老的 Web 编程技巧:在一个隐藏的窗体字段中来回传递状态。
默认情况下 ViewState 将被启用,并且是由每个控件(而非页面开发人员)来决定存储在 ViewState 中的内容。有时,这一信息对应用程序并没有什么用处。尽管也没什么害处,但却会明显增加发送到浏览器的页面的大小。因此如果不需要使用 ViewState,最好还是将它关闭,特别是当 ViewState 很大的时候。

使用 ViewState 时,每个对象都必须先序列化到 ViewState 中,然后再通过回传进行反序列化,因此使用 ViewState 并非是没有代价的。
禁用ViewState——应用程序(在 web.config 中): <Pages EnableViewState="false" ?/>
如果在应用中 ViewState 不是必须的,并且自动产生了一个很大的 ViewState 开始影响性能,就应该考虑禁用它。

-------------- END ---------------