【问题标题】:Combobox Dropdown Caching组合框下拉缓存
【发布时间】:2010-10-27 07:11:10
【问题描述】:
我们有一个 VB.Net 应用程序,它有大约 80 个独特的组合框,分布在 15 个 Windows 上。目前,当加载 Window 时,ComboBoxes 直接从 SQL 数据库中检索其内容。
这是非常低效的,因为 ComboBox 的内容很少更改,因此在程序第一次运行时检索所有 ComboBox 下拉值是有意义的。
我一直在努力在这方面的最佳实践网络上找到有效的示例。所以为了避免我重新发明轮子,有没有人有任何智慧之言或代码 sn-ps 来指出我正确的方向?
【问题讨论】:
标签:
winforms
caching
combobox
drop-down-menu
【解决方案1】:
缓存绝对是要走的路,使用 Hashtable 或类似的东西。如果您可以将所有查询合并为一个返回多个表的 SQL 请求,并在一次调用中获取所有内容。
【解决方案2】:
可以将数据序列化为您在启动时加载并填写组合框的 xml 文件。然后,您可以向数据库中添加一个具有单个值的表,即您更新数据库的最后日期,如果它在当前日期之后,则运行数据库查询以填写组合框,然后更新 xml 文件。
【解决方案3】:
这与我正在开发的应用程序中的 reqd 非常相似。我创建了一个静态类,每个组合框都有静态 DataTables。当应用程序加载时,它会填充所有静态数据表。
示例:
static public class GlobalDropdownData
{
static private DateTime Combo1Table;
static private DataTable Combo1Table;
static private DataTable Combo1Table;
}
Vb.net 类似于:
Public Class GlobalDropDownData
Shared Combo1DT As DataTable
Shared Combo2DT As DataTable
Shared Combo3DT As DataTable
End Class
【解决方案4】:
是的,您可以在应用程序启动时加载所有查找数据,在一次调用中返回多个结果集。我继承的一个 Winforms 应用程序就是这样做的,但代价是启动时间非常慢,因为从数据库中获取查找数据以返回所有缓存的结果集的 Web 服务调用需要几秒钟才能完成。执行。如果这是一个问题,您将需要异步启动数据库/Web 服务调用,以便在执行数据库代码时进行更多的初始化工作。如果您需要确保在用户执行某项任务之前数据已返回,例如单击按钮以显示带有一个或多个需要缓存数据的组合框的屏幕,则可以使用一个或多个 Winforms Timers也有帮助。
另一个提高性能的选项可能是在单独的线程中执行数据访问调用,尽管在我正在处理的项目中,我发现其他选项足以将启动时间从大约 10 秒减少到 3 秒以下,而无需必须处理多线程的复杂性。