从数据库中填充许多控件(体系结构和性能问题)

本文关键字:体系结构 性能 问题 控件 数据库 填充 许多 | 更新日期: 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_idchoice列。

你可以选择所有与你有关的数据,然后在你的代码中拆分它们。

SELECT * FROM dropdown_choices WHERE dropdown_id IN (1, 2, 3, 10, ...);