优化ViewState

时间:2009-12-03 23:20:38

标签: asp.net optimization viewstate

有没有人有任何想法或参考,他们可以指出我有关优化我的ASP .NET应用程序的视图状态?我不想一起关闭它,优化它的主要目标是加快性能,所以我不想运行昂贵的函数来递归地禁用某些控件的viewstate,因为该函数会减慢加载页面的时间会破坏目的。

有什么想法吗?

3 个答案:

答案 0 :(得分:9)

以下是一些如何优化通过线路传输的ViewState大小(copied from this answer)的想法:

  • 禁用ViewState 以获取不需要它的控件(这是最有效的解决方案)。例如。如果你可以在服务器上缓存一些数据,那么你可以将任何数据绑定控件与每个请求重新绑定,而不需要在ViewState中保存所有内容。
  • 在服务器(IIS)上启用HTTP压缩。这减少了发送到客户端的页面大小,包括ViewState。
  • 压缩ViewState 。与HTTP压缩相比,这还有一个额外的优势:它还减少了PostBacks(发送回服务器的数据)的大小,因为ViewState总是在PostBack期间发送回服务器。对此有各种方法,例如如this blog post
  • 所示
  • 将ViewState存储在服务器上,而不是将其发送到带有该页面的隐藏字段中。最简单的方法是使用SesionPageStatePersister,但还有其他解决方案将ViewState存储到磁盘而不是使用会话(see here for example)。

答案 1 :(得分:6)

除了“不要在你的ViewState中投入太多”之外,我无法告诉你。

我想寻求优化的地方:

  • 您自己添加到ViewState的任何内容
  • 大量数据绑定到数据显示控件,如GridViews<x>ListsRepeaters

GridViewsViewState特别不好;你数据绑定所涉及的一切,所以如果你绑定一个特别大的列表,期望ASP.NET为你处理它的分页,你将有一个巨大的ViewState。解决这个问题的唯一方法是一次只将一个页面绑定到GridView,但这意味着你必须进行数据端分页,这可能同样痛苦,或者关闭{{ 1}}对于ViewState,这意味着(可以说)有用的功能,如内联编辑不再可用。

这里没有银弹。

答案 2 :(得分:1)

ViewState是一个客户端状态管理,并成为您的请求和响应数据包的一部分,而大量的视图状态确实会降低您的应用程序性能。优化ViewState性能的一个快速选项是将其保留在服务器端,并仅在需要时使用它。这是有道理的,因为ViewState从未真正用于客户端浏览器端,并且在回发时总是需要在服务器端。您可以使用分布式缓存系统(如AppFabric或NCache)在服务器端存储ViewState,这有助于提高性能。

我亲自与NCache合作,后者为ViewState缓存提供了无代码更改提供程序。

Click here to view the article for ASP.NET View State Caching