gpt4 book ai didi

asp.net - View 状态或 session 或数据库调用

转载 作者:行者123 更新时间:2023-12-01 11:56:25 24 4
gpt4 key购买 nike

我有一个第一次加载的 asp.net 页面:

1:进行数据库调用并获取数据 - XML 字符串(此 block 可以超过 100kb)。而且这个数据库调用有点昂贵,大约需要 5-10 秒。

2:我循环遍历此 XML 并使用来自 XML 的值创建自定义集合。然后将其绑定(bind)到中继器控件。

现在转发器控件有一个文本输入。用户可以自由地在一个或多个或所有 TB 中输入值或留空。然后点击保存按钮。

在保存回发时,我将不得不循环遍历转发器中的所有行,收集其中有一些输入的所有行,并使用初始值和这个新输入值生成一个 XML,并将其保存到数据库中。

问题:所以我需要引用所有初始 XML 值。我可以想到这些选项,并寻找有关选择最佳选项的意见。

1:ViewState:将我的集合或 XML 字符串存储在 ViewState 中 - 我确定它会太大

2:Session:使用Session存储xml字符串的Collection——再次

3: DB Call:进行一次 DB 调用以再次获取数据 - 正如我所说,这是一种昂贵的调用,我的 DBA 要求我避免这种情况

4:HiddenField:将 XML 中的基本数据存储到 HiddenField 中,并将其用于保存操作。即在每个中继器项目中找到所有隐藏字段

就更好的请求响应和更少的服务器资源利用率而言,哪个最好?还是我缺少更好的方法?

PS:只能使用 ASP.NET 2.0 WebForms。

更新1:

我用 ViewState 尝试了以下操作:

1:存储整个 xml 字符串:ViewState 长度 = 97484 并且 FireBug 显示页面大小 - 162Kb

2:存储精简版本的 Collection,仅包含所需数据:ViewState 长度 = 27372,FireBug 显示页面大小 - 94Kb,使用 gzip 压缩后,它减少到 13kb

对于现有网站,FireBug 显示大小 236Kb

所以绝对选项 2 更好,我的新版本比当前网站更好。那么有什么意见吗?

最佳答案

一个简单的问题 - 谁是此页面的目标受众?如果它是公司的内部网站,那么仅将数据存储在 View 状态中可能是可以接受的。如果它是给外部人员的,例如潜在客户,那么speed and performance probably matter to you more .

  1. Viewstate - 您是否尝试过将 XML 添加到 View 状态?页面大小增加了多少?如果您对所有页面进行 gzip 压缩,而不是通过网络发送未压缩的页面,那么您会发现大小减少了大约 70% - 如今 30kb 并不算多...

  2. Session - 值得记住的是,如果空间不足,服务器可以并且将会从 session 中删除数据。它们也可能过期。您是否相信您的用户不会在新选项卡中再次登录,然后提交他们在过去 10 小时内打开过的页面?虽然使用 session 会导致网络上的数据减少,但如果该值最终因任何原因被删除,您可能需要从数据库中重新提取数据。此外,如果您处于网络场环境等环境中,则涉及跨服务器同步 session 会很复杂。

  3. DB Call - 可以以任何方式优化查询吗?所有领域的索引都需要它们吗?也许您和您的 DBA 可以减少拉动的痛苦。但话又说回来,如果数据可以在您第一次拉取数据和用户提交更改之间发生变化,那么我怀疑您不想重新拉取它。

  4. 隐藏字段 - 与将整个字符串放入 Viewstate 相比,使用这些字段可以节省更少的数据。该页面不会像 session 一样依赖于网络服务器的状态,您也不会与更改数据库状态的其他用户竞争。

总的来说,我认为 4 可能是最好的选择,前提是您能够负担得起让您的页面速度稍微慢一点。使用Firebug/YSlow比较实现4前后传输了多少数据。

最后一个想法 - 在您的 web 应用程序的其余部分中,这样的事情是如何在回发之间持续存在的?假设您没有自己编写整个程序/只是刚刚开始编写,您可能会找到一些线索,了解处于类似情况的其他开发人员是如何解决问题的。

编辑:

there is a load-balancer, not sure how it will play with Session

如果您有负载均衡器,那么您需要确保 session 状态存储在状态服务器或类似服务器中,而不是存储在进程(“inproc”)中。如果 session 存储在网络服务器上,则选项 2 将非常糟糕与负载平衡器一起播放。

关于asp.net - View 状态或 session 或数据库调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6751622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com