Combobox下拉缓存

时间:2009-05-19 11:25:26

标签: winforms caching combobox drop-down-menu

我们有一个VB.Net应用程序,它有大约80个独特的ComboBox,分布在15个Windows上。目前,当加载Window时,ComboBox会直接从SQL数据库中检索其内容。

这是非常低效的,因为ComboBox的内容很少更改,因此在程序首次运行时检索所有ComboBox下拉值是有意义的。

我一直在努力在网络上找到这方面的最佳实践。因此,为了避免让我重新发明轮子,那里的任何人都有任何智慧或代码片段的词语指向我正确的方向吗?

4 个答案:

答案 0 :(得分:2)

缓存肯定是要走的路,使用Hashtable或类似的东西。如果您可以将所有查询合并到一个SQL请求中,该请求返回多个表并在一次调用中获取所有内容。

答案 1 :(得分:1)

可以将数据序列化为您在启动时加载的xml文件并填写组合框。然后,您可以使用单个值(更新数据库的最后日期)向数据库添加表,如果它在当前日期之后,则运行数据库查询以填充组合框,然后更新xml文件。

答案 2 :(得分:1)

这与我正在开发的应用程序中的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

答案 3 :(得分:0)

是的,您可以在应用程序启动时加载所有查找数据,在一次调用中返回多个结果集。我继承的Winforms应用程序就是这样做的,但权衡的是启动时间非常慢,因为从数据库获取查找数据以返回所有缓存的结果集的Web服务调用需要几秒钟时间执行。如果这是一个问题,您将需要异步启动数据库/ Web服务调用,以便在执行数据库代码时可能发生更多初始化工作。如果您需要确保在用户执行某项任务之前已返回数据,例如单击按钮以显示包含一个或多个需要缓存数据的组合框的屏幕,则可以使用一个或多个Winforms计时器也有帮助。

协助性能的另一个选择可能是在一个单独的线程中执行数据访问调用,虽然在我正在进行的项目中,我发现其他选项足以将启动时间从大约10秒减少到3秒以内必须处理多线程的复杂性。