我在页面中使用了'n'个服务器控件。现在我进入了性能调优,我注意到我的ViewState
太大了,这让我的页面变慢了。
我知道Gzip可以压缩ViewState
大小。在asp.net中减少ViewState
的任何其他建议。我不想在IIS中执行,因为我的Web应用程序托管在共享服务器上。
答案 0 :(得分:8)
假设视图状态的大小是“缓慢”的主要原因,我建议您从更全面的方法解决它。
你有'n'个服务器控件,你需要所有'n'数字作为服务器控件而不仅仅是纯HTML吗?
说你真的需要他们所有'n',他们都需要启用viewstate吗?
这是一篇很好的文章(如果您还没有阅读过),它提供了更多见解: VIEWSTATE size minimization
答案 1 :(得分:5)
EnableViewState = false;
应该成为你的朋友。
假设您目前仅在需要的地方使用viewstate,则可以执行以下操作:
Labels
切换为Literals
,尤其是在模板中使用它们时。标签需要更多的观点。答案 2 :(得分:2)
只有在需要记住回发之间的页面状态时才应使用视图状态。它用于防止对数据库的额外访问。因此,如果您的控件不需要,请使用EnableViewState = False
。如果您网页上的任何内容都不需要视图状态,则可以通过在EnableViewState = False
代码中添加Page
来停用该网页的视图状态。
如果您的服务器负担得起,您可能希望将数据传输到Sessions
。如果安全需要(viewstate不应包含敏感数据),或者viewstate持有大量数据,请执行此操作。请注意,默认情况下,Sessions
存储在服务器的内存中。因此,如果您期望许多并发用户,则不希望对大数据使用太多。但是,您可以更改会话存储的位置(即另一台服务器)。
答案 3 :(得分:2)
将以下代码添加到生成大型viewstate值的页面。 或者,可以将其添加到母版页,以消除在每个页面上添加的需要。以下代码允许将视图状态存储在会话中。
protected override PageStatePersister PageStatePersister
{
get
{
return new SessionPageStatePersister(this);
}
}
答案 4 :(得分:0)
您应该做的第一件事就是在不需要它的地方关闭viewstate。检查控件并确定哪些控件绝对需要打开viewstate。
答案 5 :(得分:0)
正是我遇到的问题。我不得不扩展HiddenFieldPageStatePersister并将viewstate保存在数据库中。我写了一篇完整的文章来指导你。