2009-05-19 82 views
4

我们有一个VB.Net应用程序,它有大约80个分布在15个窗口的独特组合框区域。目前当一个窗口被加载时,组合框直接从SQL数据库中检索它们的内容。组合框下拉缓存

由于ComboBoxes的内容很少发生变化,因此效率相当低,所以在程序首次运行时检索所有ComboBox下拉值是有意义的。

我一直在努力寻找这方面最佳实践网络上的工作示例。所以为了避免我重新发明轮子,有没有人有任何智慧或代码片段的话来指向我的正确方向?

回答

2

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

1

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

1

这与我正在开发的应用程序中需要的内容非常相似。我创建了一个静态类,每个组合框都有静态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 
0

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

辅助性能的另一个选择可能是在单独的线程中执行数据访问调用,但在我正在开发的项目中,我发现其他选项足以将启动时间从大约10秒缩短到3秒以下而不必处理多线程的复杂性。