2014-06-10 77 views
2

我正在開發一個Windows應用程序,其中我有一個網格控件,我想從我的MS訪問數據庫顯示不同的查詢輸出。 我有12個查詢結果大約75列1000行 有不同的菜單來調用和顯示此查詢結果如何管理Winform .Net應用程序中的數據和內存?

如果我每次讀取查詢查詢菜單,並通過訪問數據庫,大約需要15秒。爲了避免這種情況,我計劃在應用程序啓動時將所有查詢加載到內存中,基本上創建一個數據集並將所有表存儲到該數據集中,現在通過不同查詢顯示和訪問變得更快。

我的問題是 - 這是正確的,我在做什麼?如果沒有其他更好的方法來處理這個問題? 將轉向WPF幫助嗎?或任何其他我需要照顧的事情。

請幫助我,對不起,如果這是一個愚蠢的問題

回答

0

首先,創建數據庫有效地存儲數據和查詢。具有相同的內存表中的數據結構和類似的查詢通常會導致性能下降。但是,如果您更改數據結構(創建臨時表或僅存儲查詢結果),則情況完全不同,但同樣,性能應該非常類似(此時內存緩存將更好 - 儘管數據庫也可以將查詢結果緩存在內存中)。這是假定數據庫設計正確(主要是,索引是好的,並被查詢使用)。

據我所知,在WPF和WinForms之間的性能差異可以忽略不計比較的時候,你所提到的數額(15秒)。 WPF和WinForms都會在幾分之一秒內顯示適合屏幕的控件量。當然,有一些警告,但是WPF和WinForms都有足夠的可以被視爲同樣適用於您的應用程序。

我的建議是優化查詢儘可能,考慮到頻繁使用的數據創建臨時表,然後在內存中緩存的結果(無內存加入!除非你知道B樹)。然後只抓取需要的數據(不要抓取所有1000條記錄,抓取前20條並立即顯示)並顯示它(重用控件),必要時在後臺線程中抓取數據。繼續在後臺線程中獲取數據,試圖預測用戶將執行哪些操作以及可能請求哪些數據。 (1)優化,然後2)緩存,3)在後臺獲取,4)重用UI控制,5)僅顯示可見的內容。

+0

'在WPF和WinForms之間的性能差異可以忽略不計' - 您可能想觀看[這個短片](http://www.youtube.com/watch?v=D3Y6DnFpHCA) –

+0

@HighCore - 感謝視頻。但是如果我們正在討論填充一個巨大的列表框,那麼我們應該討論數據綁定 - 創建一個20K列表並分配listbox.DataBinding屬性在不到一秒的時間內填充WinForms列表框。 –

+0

@AlexAtNet感謝輸入,我會定義考慮臨時表,並看看它如何去.. – SSK

相關問題