【问题标题】:Dynamic Controls State Management - View State Vs Database动态控制状态管理 - 查看状态与数据库
【发布时间】:2009-12-28 23:59:27
【问题描述】:
存储与动态控件有关的数据的最佳选择是什么。这是我的场景。
- 可随时检索大约 5 到 15 个主表。
- 动态控件的类型可以是 TextBox、DropDownList、ListBox、GridView。
- Master's 不会在回发时更改,但页面会在同一会话中产生许多回发。
- 我正在使用带有 .NET 2.0 的 SQLServer 2005
作为更有经验的用户,您是否建议从数据库中填充这些控件中的项目或允许每个控件的视图状态来维护项目列表?我从更快的性能角度来看这个。另外,请您提供您的建议的理由。
也欢迎任何其他建议。如果您需要更多信息,请告诉我。
谢谢
- 拉贾
【问题讨论】:
标签:
c#
.net
asp.net
viewstate
dynamic-controls
【解决方案1】:
这取决于。正如 Aaron 所提到的,您存储在视图状态中的所有内容都必须从客户端上传回服务器。对于一个 inter 网站,这通常会使 viewstate 成为存储表格数据的非常糟糕的地方。对于客户端可能具有 100Mbs 上传带宽的 intra 网站来说,这并不是什么大问题,而 Viewstate 可能是一个更好的地方;如果重建此数据的数据库查询成本很高,则尤其如此。
也就是说,许多 Intranet 站点最终被移植以支持在家工作的员工,然后突然发现自己在 Internet 环境中工作,因此您可能仍希望牢记类似 Internet 的性能限制。在这种情况下,如果您的数据库查询最终成为瓶颈,您可能会考虑使用索引/物化视图甚至单独的表,您可以在其中临时插入此数据以进行快速检索,以帮助加快处理速度。
【解决方案2】:
在您的情况下,我肯定会在数据库中查找数据,而不是在 ViewState 中存储任何表格数据。每次回发时,存储在 ViewState 中的所有内容都会从客户端发送回服务器。它是未加密的、使用的、重新加密的,然后被发回,这比查询数据库的成本要高得多。
id 之类的小东西可以存储在 ViewState 中,但不能存储整个数据表。