2011-03-23 69 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

相关问题