Viewstate Optimisations

时间:2009-08-28 07:58:41

标签: asp.net asp.net-ajax webforms viewstate

HY,

我对Viewstate的asp.net ajax项目中的一些常规优化方法感兴趣

(例如,减少视图状态的大小, 或者只是以某种方式加速观察状态, 或者其他这应该是一般性讨论:-))。

那么你对ViewState使用什么样的优化? 在Asp.net或Ajax框架上提供了哪些可能性?

6 个答案:

答案 0 :(得分:2)

禁用显示您不需要的控件的状态,例如页面上有许多控件,可能不需要视图状态,如菜单,某些超链接,某些显示统计标签等,请关闭它们。

您还可以做的另一件事是,减少控件ID长度,这会将页面大小提高到更好的水平。

您的控件ID如下所示

PageContainer1_MyLoginContainerUserControl1_MyLoginForm1_MyUsername1

PageContainer1_MyCustomerDataGrid1_item0_MyCustomerNameLabel

我知道这听起来不错,但如果您注意到网格/列表项目放置了如此多的大控件ID,我们注意到通过减少ID中的某些字符也有助于改善页面大小。在list / gridview等中它将这个提高了30%到40%,嵌套的用户控件也很糟糕,当你真的不认为你需要控件的ID时,只需要把它放在3个字母以上。

答案 1 :(得分:2)

@silky是对的,尽可能禁用它。我们尝试在尽可能多的控件上禁用它。

此外,一旦你尽可能少地使用它,可能值得在你的页面中放置这样的东西(或者更好的基页类)

Protected Overrides ReadOnly Property PageStatePersister() As PageStatePersister
    Get
        Return New SessionPageStatePersister(Me)
    End Get
End Property

但这取决于您拥有多少用户以及您拥有多少内存,并且它假定您正在使用会话。

哦,在C#中它是:

protected override PageStatePersister PageStatePersister
{
    get
    {
        return new SessionPageStatePersister(this);
    }
}

答案 2 :(得分:1)

最佳优化:在其中存储较少的东西。

但你需要具体。你遇到了问题吗?如果是,有什么控制?你自己?其他?请展开。

答案 3 :(得分:1)

我可以为此受到批评:但在某些情况下你可以store viewstate in session by just override tho methods of Page

为了平衡我的业力,我还建议你在未来的项目中放弃viewstate和session;),例如尝试使用Asp.NET MVC。

答案 4 :(得分:1)

如果您从未阅读 TRULY Understanding ViewState ,请先执行此操作。

对于帮助ViewState的AJAX,我只是在这里推测,但如果你在UpdatePanel中有整个页面,你可能能够为整个页面禁用ViewState

答案 5 :(得分:1)

我能够将我的视图状态从200-300KB减少到62个BYTES,方法是将它保存在服务器上,只是来回传递一个GUID。

我已经写了一篇关于如何通过扩展你可以参考的HiddenFieldPageStatePersister来做到这一点的文章:

http://ashishnangla.com/2011/07/21/reducing-size-of-viewstate-in-asp-net-webforms-by-writing-a-custom-viewstate-provider-pagestatepersister-part-12/