组合框下拉缓存

4
我们有一个VB.Net应用程序,大约有80个唯一的ComboBox分布在15个窗口中。目前,当窗口加载时,ComboBox直接从SQL数据库检索其内容,这是相当低效的,因为ComboBox的内容很少更改,因此在程序第一次运行时一次性检索所有ComboBox下拉值是有意义的。我在网上找不到关于这方面最佳实践的有效示例。因此,为了避免我重新发明轮子,请问是否有任何智慧之言或代码片段可以指引我正确的方向?
4个回答

2

缓存绝对是正确的选择,使用哈希表或类似的数据结构。如果您可以将所有查询合并为一个SQL请求,在一次调用中获取多个表格。


1

这与我正在开发的应用程序中所需的非常相似。我已经创建了一个带有每个组合框的静态数据表的静态类。当应用程序加载时,它会填充所有静态数据表。

示例:

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

1

可以将数据序列化为一个XML文件,在启动时加载并填充下拉框。然后,您可以向数据库添加一个表格,其中只有一个值,即您上次更新数据库的日期。如果它在当前日期之后,则运行数据库查询以填充下拉框,然后更新XML文件。


0

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

进一步提高性能的另一个选项是在单独的线程中执行数据访问调用,尽管在我正在处理的项目中,我发现其他选项足以将启动时间从约10秒降至不到3秒,而无需处理多线程的复杂性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接