我建立了一个项目,在一个表单(frmDash)中,我在容器中添加了几个表单作为控件。
frmChart.TopLevel = False
frmChart.FormBorderStyle = False
frmChart.ControlBox = False
container.Controls.Add(frmChart)
当我关闭 frmDash 时,内存减少了,但没有预期的那么多。
因此,每次我重新打开 frmDash 时,内存都会比上次打开时增加。
当我关闭 frmDash 时:
For each frm as frmChart in container.Controls
frm.Close
Next
container.Controls.Clear
container.Dispose
在 frmChart 处置方法中,我处置了我拥有的所有东西(数据表、列表、图表 - 我知道我不应该处置其中的一些,但我正在努力找出问题所在)。
有谁知道我做错了什么?
我在这里找到了这个:
我还想提一下,DataSet.Clear() 和 DataSet.Dispose() 不会使行被 GC 清除。.Clear() 方法将删除数据集中每个数据表中的所有数据行。但是,它不会删除表和关系。另外,.Dispose() 方法是由DataSet MarshalByValueComonent 的基类实现的,所以它不会释放dataset 的托管资源。
要让GC清除所有数据表和数据行,请将ds设置为null,这样原始数据集的所有托管资源都不会被引用,GC最终可以将它们全部清除。另一种方法是使用DataSet.Reset,这样数据集将处于初始化状态,没有添加任何表或关系。
如果这是真的,我必须将每个数据表都设置为空,因为我知道我只是在处理它。
我这样做了,我将我使用的每个数据表都设置为 none ,但内存泄漏仍然存在。