TabControl中的托管内存泄漏

问题描述 投票:0回答:1

我知道这与过去提出的问题类似,但是提供的答案均不适用于我的项目。

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

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

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

这些进程都没有释放任何内存,因此我必须缺少一些非常基本的东西。

添加TabPage和表单的代码:

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上仍然不需要任何东西。)

由于某些人在资源非常有限的机器上使用我的实际应用程序,因此将不胜感激任何帮助。

提前感谢您的帮助!

vb.net memory-leaks tabcontrol
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.