【问题标题】: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 秒以下,而无需必须处理多线程的复杂性。

          【讨论】:

            猜你喜欢
            • 2010-11-30
            • 2014-08-13
            • 2016-10-11
            • 2011-04-13
            • 2015-09-14
            • 1970-01-01
            • 2013-07-22
            • 1970-01-01
            相关资源
            最近更新 更多