vb.net表单没有被处理

时间:2016-03-05 09:50:57

标签: c# vb.net

我在vb.net中创建了一个简单的项目,其中有2个表单“mainform”和“childform”。 “mainform”有一个简单发出childform.show()的按钮,“childform”有一个发出me.close()和me.dispose()的按钮。

当我运行项目时,它会显示主窗体。我点击按钮,打开子窗体。当我单击子窗体按钮时,它会关闭子窗体并且所有窗体都显示良好。

然而,当我使用JetBrains dotMemory对其进行分析时,我会在打开子窗体之前拍摄快照,然后在打开和关闭它之后拍摄另一张快照。我比较了快照,它显示了一个仍然存活的子窗体的实例。当我查看依赖链时,我发现它被“MyProject + MyForms”实例保持活着。

如果我多次打开和关闭子窗体并重新生成,则仍会有一个子窗体实例存活。

Showing ChildForm being retained by MyProject+MyForms

有人能解释这里发生了什么吗?

2 个答案:

答案 0 :(得分:1)

您仍然在主窗体中引用了子窗体,因此垃圾收集器不会将其从内存中删除。

请注意,这与Dispose()无关。

只要有对象的引用,就不会被收集。

答案 1 :(得分:0)

您的嵌套类MyForms有一个字段 m_ChildForm ,您出于某种原因将引用放在ChildForm类的实例中。此引用可防止收集ChildForm对象。关闭子表单时将此字段设置为null,或者根本不将引用存储在类字段中。

enter image description here