【发布时间】:2017-09-22 00:56:34
【问题描述】:
我有 2 个窗体 frmMain 和 frmDialog。当我单击 frmMain 上的按钮时,会打开 frmDialog。这是我的按钮点击事件代码:
frmDialog f2 = new frmDialog();
f2.Show();
当我继续点击按钮时,会出现新的表单并且不要关闭。对象超出范围时会被垃圾回收。
我的问题是:
为什么变量 f2 在超出范围时不被垃圾回收?
是内存泄漏吗?
【问题讨论】:
-
你关闭过表单吗?你的问题没有说清楚。为什么“new frmDialog()”不应该创建一个新的 Form 实例?
-
垃圾回收与显示窗口无关。此外,“对象超出范围时会被垃圾收集”是不正确的。更接近正确的说法是“当可以证明不再使用该对象时,该对象成为有资格收集”。这可以早于“范围”的结束,也只是声明资格。无法保证何时会收集该对象。
-
@Smartis - 只要“你”,无论你用这个词是什么意思,都不也符合收集条件。
-
当我关闭 frmMain 时,frmMain 以及所有对话框都会关闭
标签: c# garbage-collection