【问题标题】:Strategies for reducing ViewState size in asp.net在 asp.net 中减少 ViewState 大小的策略
【发布时间】:2010-12-28 23:45:20
【问题描述】:

我在我的页面中使用了“n”个服务器控件。现在我开始进行性能调整,我注意到我的ViewState 太大了,这让我的页面变慢了。

我知道ViewState 的大小可以通过 Gzip 压缩。在 asp.net 中减少 ViewState 的任何其他建议。我不想在 IIS 中执行此操作,因为我的 Web 应用程序托管在共享服务器上。

【问题讨论】:

  • 为什么你认为ViewState是页面慢的原因?您是否使用过 HttpFox 之类的工具来更仔细地检查事物?

标签: asp.net performance controls scalability viewstate


【解决方案1】:

假设视图状态的大小是“缓慢”的主要原因,我建议您从更全面的方法来解决它。

您有“n”个服务器控件,您是否需要所有“n”个数字都是服务器控件而不仅仅是纯 HTML?

假设您真的需要所有“n”个,是否所有这些都需要启用视图状态?

这是一篇很好的文章(如果您还没有阅读过),它提供了更多的见解: VIEWSTATE size minimization

【讨论】:

    【解决方案2】:

    EnableViewState = false; 应该成为你的朋友。

    假设您当前仅在需要的地方使用视图状态,您可以执行以下操作:

    1. Labels 切换为Literals,尤其是在模板中使用它们时。标签需要更多的视图状态。
    2. 尽量减少回发。更少的回发将使您需要更少地使用视图状态,因为您不需要重新加载整个页面。例如,使用 AJAX 调用并通过客户端操作写出数据。
    3. 使用会话或缓存为网格和数据密集型控件存储大量数据。每次重新加载时,只需自己填写即可。

    【讨论】:

      【解决方案3】:

      仅当您需要记住回发之间的页面状态时才应使用视图状态。它用于防止对数据库的额外访问。因此,如果您的控件不需要这样做,请使用EnableViewState = False。如果您页面上的任何内容都不需要视图状态,您可以通过在 Page 标记中添加 EnableViewState = False 来禁用该页面的视图状态。

      如果您的服务器负担得起,您可能希望将数据传输到Sessions。如果出于安全考虑(视图状态不应包含敏感数据)或您的视图状态包含大量数据,请执行此操作。请注意,默认情况下,Sessions 存储在服务器的内存中。因此,如果您期望有很多并发用户,您不希望对大数据使用太多。但是,您可以更改 Session 的存储位置(即另一台服务器)。

      【讨论】:

        【解决方案4】:

        将以下代码添加到生成大视图状态值的页面。 或者,可以将其添加到母版页以消除在每个页面上添加的需要。下面的代码允许将视图状态存储在会话中。

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

        【讨论】:

          【解决方案5】:

          您应该做的第一件事是在不需要的地方关闭视图状态。检查控件并确定哪些控件绝对需要打开视图状态。

          【讨论】:

            【解决方案6】:

            正是我遇到的问题。我不得不扩展 HiddenFieldPageStatePersister 并将视图状态保存在数据库中。我已经写了整篇文章来指导你。

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

            【讨论】:

              猜你喜欢
              • 2012-02-15
              • 2012-07-09
              • 2020-06-15
              • 2016-08-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多