我知道这与过去提出的问题类似,但是提供的答案均不适用于我的项目。
从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上仍然不需要任何东西。)
由于某些人在资源非常有限的机器上使用我的实际应用程序,因此将不胜感激任何帮助。
提前感谢您的帮助!
用.Remove
替换.Dispose
似乎为我解决了这个问题。
您必须使用Tabcontrol.TabPages('tabpagename').dispose