视图状态的大小在嵌套的中继器控件上是巨大的[英] view state size is huge on nested repeater controls

问题描述

我们有要求,例如我们必须向用户显示一些问题.当用户重定向到此页面时,它将显示所有父母问题.父母问题可以有子问题.子问题可以上升到第六级.关于选择父母问题是或否,它会显示孩子的问题.

为了实现这一要求,我使用嵌套的中继器控件高达 6 级.意味着中继器内的中继器六次.在每个中继器的 itemTemplate 中,我正在使用用户控件.用户控件包含一些标签和一个下拉列表.使用此用户控件在每个嵌套中继器的项目模板中.在父问题下拉列表的选定更改事件中,我们从数据库中获取子问题并绑定嵌套中继器.

功能方面它工作正常.我面临的问题是视图状态的大小.即使转发器包含单个数据并且没有子问题,页面大小也超过 30 MB.页面的性能非常慢.on selectedindex 更改其耗时超过 2 分钟.

我尝试使用压缩逻辑将视图状态存储在服务器的文件系统上.页面的性能大大降低.获取子问题需要 50 秒.数据库对象经过完全调整,存储没有问题过程
存储过程几乎不需要 2 秒来获取孩子的问题.

我尝试将更新面板放在嵌套中继器中.性能相同.因为页面包含近 100 个 qs 客户希望改进性能.

任何人都可以帮我解决这个问题.为什么视图状态的大小在转发器中更多,即使它包含一个数据.任何帮助或任何方法都非常感谢.

推荐答案

你看过ViewState:降低性能开销的各种方法[^]?关于该主题的文章有一百万篇.

更好的是,在实际上不需要视图状态的所有控件(甚至页面,如果可能)上设置 EnableViewState = false.

使用 ASP.NET 跟踪输出查看视图状态大小,如果您确实需要启用某些视图状态,至少您将能够查看哪些控件对视图状态桶有贡献,并禁用所有视图状态,但真正的视图状态除外需要它.

本文地址:https://www.itbaoku.cn/post/1395098.html