TabControl中的托管内存泄漏

时间:2016-12-27 21:07:54

标签: vb.net memory-leaks tabcontrol

我知道这与过去提出的问题类似,但所提供的答案都没有适用于我的项目。

从TabControl中删除TabPages时,我在性能监视器中看到了托管内存泄漏。

为了简化故障排除,我创建了一个简单的测试程序来添加和删除包含WebBrowser的TabPages。我还添加了控件来手动收集垃圾,清除控件中的TabPages并删除控件。

测试应用程序的性能监视器:http://image.prntscr.com/image/77d56b7dd6534b07a55506c825b5f772.png

这些进程都没有释放任何内存,因此我必须遗漏一些非常基本的内容。

添加TabPage和Form的代码:

Private Sub MemoryTestToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles MemoryTestToolStripMenuItem.Click
    Dim pageNew As New TabPage("Memory Test")
    Dim formNew As New MemoryTest

    formNew.TopLevel = False
    formNew.Parent = pageNew
    formNew.AutoSize = True
    formNew.Show()

    TabControl1.TabPages.Add(pageNew)
End Sub

删除TabPage和表单的代码:

Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
    CType(Me.Parent.Parent, TabControl).TabPages.Remove(Me.Parent)

    Dim pageParent As TabPage = CType(Me.Parent, TabPage)

    Me.Parent = Nothing

    pageParent.Dispose()

    WebBrowser1.Navigate("about:blank")

    For Each item As Control In Controls
        Me.Controls.Remove(item)
        item.Dispose()
    Next

    Me.Dispose()
End Sub

(我知道我有点过分了,但是我正在尝试让我想到的一切让GC知道Form或TabPage上仍然没有任何内容。)

任何帮助都会受到极大的赞赏,因为我的实际应用程序正被资源有限的机器上的某些人使用。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

.Remove代替.Dispose似乎为我解决了这个问题。

您必须使用Tabcontrol.TabPages('tabpagename').dispose