2012-10-15 38 views
4

我目前在DataTable中存儲了大約一百萬行,這需要大約600 Mb的RAM。如何在Windows窗體中保留大量內存數據C#

因此,當您運行應用程序時,它會在DataTable中存儲1 000 000行並將其顯示在GridView上。當你關閉應用程序時,這顯然會清除內存。

我想給用戶這個選項,換句話說,當用戶試圖關閉表單時,他會問他是否要清除內存。

這樣做的原因是,無需等待每次運行應用程序時都將數據讀入Datatable。

....我對C#相當新,所以我很抱歉如果這是一個適當的問題在這裏。

+0

我不確定你的問題是否有意義,因爲它的措辭:如果應用程序關閉,你將如何保持你的數據在內存中?你的意思是你想將數據存儲到磁盤? –

+0

我不想銷燬在應用程序啓動時創建的DataTable,這必須是用戶決定從內存中刪除DataTable。 – Dreamer78692

+0

如果應用程序關閉,您*無法*將DataTable保存在內存中。它不會在您的應用程序啓動時纔會出現,除非您加載它! –

回答

3

如果在內存中存在正在運行的應用程序/進程,那麼只能保留內存中的某些內容 - 如果應用程序關閉(並且只有1個應用程序實例在內存中打開),那麼內存將會被髮布。如果你想保留在內存中,那麼你唯一的選擇將是

  • 不要關閉你的應用程序,例如只是隱藏窗口(通常是一個非常糟糕的想法,你的用戶不會感謝你)
  • 將數據保存在另一個單獨的進程中,即使應用程序不是,例如Windows服務也可以保持運行不是你的用戶會感謝你的東西,除非你真的試圖開發一種服務形式而不是Windows應用程序)。

一個更好的想法是改變你的應用程序處理大型數據集的方式,以便它不需要讓這一切在內存中,例如,如果你在一個大的列表視圖中顯示所有數據然後使用虛擬列表視圖,以便只將當前顯示給用戶的那些行加載到內存中。然後,您可以將數據存儲在外部數據庫或半永久性文件(如SQLite數據庫)中。

或者只是像你現在每次加載數據集。

3

我建議你把它保存在一個文件或數據庫而不是內存中。您可以查詢一些您想在運行時使用的數據。例如,一次有20個或50個記錄。

如果您一次在數據網格中顯示1M條記錄,我敢打賭,即使您不會瀏覽它們,這也沒有任何意義。

+0

我只是壓力測試的應用程序,我複製了14000行的表。數據來自數據庫,我將其存儲到DataTable中,因爲查詢數據庫和Datatable需要更長的時間。所以我不想要磁盤或數據庫中的數據,但是在內存中,就像Qlikview的工作方式。 – Dreamer78692

+1

我建議您每次只加載20到50條記錄,因爲這會使應用程序更具響應性,並且用戶更可能瀏覽您加載的所有數據。如果您在Google上搜索某項內容,並且每頁顯示10,000條結果,需要多長時間,以及您要查看多少結果? – Ekk

+0

對不起,我得到它有點慢,謝謝。 – Dreamer78692

相關問題