2009-05-19 142 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秒以下而不必處理多線程的複雜性。