【发布时间】:2013-08-08 07:12:58
【问题描述】:
我创建了一个示例 Windows 窗体应用程序,其中包含两个窗体 - form1 和 form2。
Form1 包含一个按钮,单击时我将 form2 显示为一个对话框,如下所示。
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
try
{
form2.ShowDialog();
}
catch (Exception ex)
{
}
finally
{
if (form2 != null)
{
form2.Dispose();
form2 = null;
}
}
}
然后我检查了应用程序,例如单击按钮,然后它将打开 form2,关闭它。并持续了大约 6 次。
当我使用 DevPartner 检查应用程序时,它始终显示 Form2 form2 = new Form2(); 已泄露
当我在网上查看时,它说如果我们使用 ShowDialog,我们需要在关闭表单后处理表单,即为什么我尝试在 finally 块中处理。但它仍然显示该行泄漏。 任何人都可以就这次泄漏提出您的建议。
【问题讨论】:
-
我总是在使用显示对话框的表单周围使用 using 块,您尝试过吗?
-
我通常不做那种处理表单的方式。为什么不尝试将 Dispose 代码放在 form2 中的按钮中?
-
@Sayse:是的,最初我尝试过使用..但没有运气..
-
@JackFrost:在 form2 的按钮中处理代码。?抱歉没找到你?
-
您确定泄漏不会在一段时间后消失吗?可能只是 gc 还没有清理它。您可以尝试添加
GC.Collect但绝对不要将其保留在您的代码中
标签: c# winforms memory-leaks devpartner