从数据库中填充许多控件(体系结构和性能问题)
本文关键字:体系结构 性能 问题 控件 数据库 填充 许多 | 更新日期: 2023-09-27 18:04:22
所以我有这个页面,收集了很多信息来创建一个有点复杂的对象。所以我把所有相关的细节都收集在一个div里,我有7个div,我填充了20个控件(DropDownListss, CheckBoxLists, Repeaters等)。
现在我只是创建方法被调用Click和Page_Load事件。每个填充过程都是单独完成的。
代码很麻烦,我也不希望性能很好,因为我知道很多连接/访问数据库对性能和数据库负载都不好。
那么我怎样才能把这个功能放在一个更好的设计和更好的性能,这里有什么帮助吗?
为什么不在Page_Load中加载所有这些数据?然后一旦进入内存(无论是对象、数据读取器还是数据集),填充控件?
这是个有点哲学意味的问题。就页面性能而言。所以你应该不会看到只有20个控件的问题。但是,您有两个关键瓶颈:
1) Get from database您需要尝试一次从数据库中获取所有数据。当然,这并不总是可能的,但它会节省你几次往返。你也可以为当前请求缓存该对象。
2)保存如果您在回发时对每个更改事件都写入db,则会花费不必要的长时间。我建议您创建一个Model
属性,从数据库中获取模型,每个更改处理程序更改该模型。一旦所有回发都被触发(我不记得最好的事件了,但我认为Page_Load
是可以的),在一次提交中将该模型写入数据库。
就性能而言,这可能是获得最大收益的最小努力。你也可以用Ajax加载控件,让它看起来更快,但这并不能解决任何问题。
NHibernate有一个非常好的特性叫做NHibernate Futures(但不是所有的数据库都支持)。您还可以从中获得其他好处,例如开箱即用的缓存、批处理写入查询等等。所以我建议考虑这个选项。
顺便说一句,你真的需要在屏幕上同时显示所有这些信息吗?您可以拆分UI层并创建,例如,wizard.如果您自己编写SQL查询,您可以组合大多数查询,以便每个表只需要一个查询。
。您可能有表dropdown_choices
,其中有dropdown_id
和choice
列。
你可以选择所有与你有关的数据,然后在你的代码中拆分它们。
SELECT * FROM dropdown_choices WHERE dropdown_id IN (1, 2, 3, 10, ...);