我知道这与过去提出的问题类似,但所提供的答案都没有适用于我的项目。
从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上仍然没有任何内容。)
任何帮助都会受到极大的赞赏,因为我的实际应用程序正被资源有限的机器上的某些人使用。
提前感谢您的帮助!
答案 0 :(得分:0)
用.Remove
代替.Dispose
似乎为我解决了这个问题。
您必须使用Tabcontrol.TabPages('tabpagename').dispose