2011-03-23 74 views
0

我想知道如果我失去了一些東西。我有一個非常複雜的應用程序,但它的核心是這樣的:.net內存管理在我的應用程序(datagridviews)

我查詢一個數據庫,它會返回10k-ish條目。

我將這些條目存儲在自定義業務對象中。

這些對象被添加到BindingListView,並綁定到datagridview。

現在,隨着時間的推移(40多個查詢),我的內存使用量不斷增加,直到我在第42次查詢時發現OutOfMemoryException。

我想知道我沒有刪除東西或有內存泄漏。我100%確信在下一個查詢開始之前,每個業務對象都被正確刪除。我真的認爲我的所有記憶(通常在應用程序死亡時爲1.5gig),都是datagridview行。

要注意:我使用.NET 2.0,VISUAL C++運行VS2008

+0

原來問題出在我的datagridview。更改其數據源不會釋放已使用的資源。在更改源之前將其設置爲空即觸發垃圾回收。 – greggorob64 2011-05-17 14:58:09

回答

1

確保包裝所有您的數據庫調用和數據讀取器使用的語句,以確保他們妥善處置

+0

我的數據庫調用非常間接,它們由完全不同的應用程序管理。對我目前的人來說,它實際上只是通過windows讀取共享內存,在閱讀後可以正確釋放。 – greggorob64 2011-03-23 18:24:29

+0

如果是這種情況,它正在被丟棄,那麼你只是從數據庫讀取太多的數據到內存中,是否有可能獲得數據的「頁面」?我的意思是,如果在屏幕上只顯示網格中的100行,然後將200讀入內存中,然後在需要時進行更新? – 2011-03-23 18:42:56

+0

我想我想通了,它的該死的DataGridView的綁定。調用BindingSource-> SourceLists-> Clear()不會釋放其對數據對象的引用。每次我運行我的查詢時,我都會刪除bindingsource並重建它,並且我相信它的工作。我已經連續運行了100個查詢,並且仍然佔用了<200mb的內存。 – greggorob64 2011-03-23 19:12:32

相關問題