为什么关闭窗体后内存会增加?
Why does memory increase after closing a form?
我对 C# 有点陌生。我读到关闭表单而不是隐藏可以释放内存。然而,当我关闭一个表单时,它甚至使内存增加。具体来说,我有两种形式:Form1
和 Form2
。当我成功登录用户时,Form2
将打开(内存为 20Mb)。 Form2
有一个用于注销用户的按钮,关闭它并返回 Form1
(内存现在增加到 41Mb,并为下一个用户继续增加)。我不知道为什么,有没有人可以帮助我?这是我 close
Form2:
的代码
private void doctorLogoutBtn_Click(object sender, EventArgs e)
{
imgBox.Image.Dispose();
this.Dispose();
Form1 Login = new Form1();
Login.Show();
this.Close();
}
好吧,根据你的描述,你想返回到已经创建的 Form1
,但我从这段简短的代码中可以看出,你创建了一个新表单。
Form1 Login = new Form1();
你在显示Form2
的时候老的Form1
被释放了吗?也许旧的没有正确发布?代码的公开部分并没有说明这一点。
您显示的代码太少无法确定,但您可以 运行 内存分析器(dotMemory、ANTS 内存)并检查是否还有一些不应该留下的对象。
应该是这样的:
using System.Linq;
...
private void doctorLogoutBtn_Click(object sender, EventArgs e)
{
// Free image resources (may appear to be optional, but doesn't spoil anything)
imgBox.Image.Dispose();
// Do we have any Form1 instances?
Form1 Login = Application
.OpenForms
.OfType<Form1>()
.LastOrDefault(); // If we have several Form1's, let's take the last one
// Only when we haven't any Form1 instances we have to create a new one
if (null == Login)
Login = new Form1();
Login.Show();
// Close (and Dispose)
this.Close();
}
在您当前的代码中
...
Form1 Login = new Form1();
Login.Show();
...
您正在创建另一个 Form1
实例,而不是寻找已经创建的实例。
我对 C# 有点陌生。我读到关闭表单而不是隐藏可以释放内存。然而,当我关闭一个表单时,它甚至使内存增加。具体来说,我有两种形式:Form1
和 Form2
。当我成功登录用户时,Form2
将打开(内存为 20Mb)。 Form2
有一个用于注销用户的按钮,关闭它并返回 Form1
(内存现在增加到 41Mb,并为下一个用户继续增加)。我不知道为什么,有没有人可以帮助我?这是我 close
Form2:
private void doctorLogoutBtn_Click(object sender, EventArgs e)
{
imgBox.Image.Dispose();
this.Dispose();
Form1 Login = new Form1();
Login.Show();
this.Close();
}
好吧,根据你的描述,你想返回到已经创建的 Form1
,但我从这段简短的代码中可以看出,你创建了一个新表单。
Form1 Login = new Form1();
你在显示Form2
的时候老的Form1
被释放了吗?也许旧的没有正确发布?代码的公开部分并没有说明这一点。
您显示的代码太少无法确定,但您可以 运行 内存分析器(dotMemory、ANTS 内存)并检查是否还有一些不应该留下的对象。
应该是这样的:
using System.Linq;
...
private void doctorLogoutBtn_Click(object sender, EventArgs e)
{
// Free image resources (may appear to be optional, but doesn't spoil anything)
imgBox.Image.Dispose();
// Do we have any Form1 instances?
Form1 Login = Application
.OpenForms
.OfType<Form1>()
.LastOrDefault(); // If we have several Form1's, let's take the last one
// Only when we haven't any Form1 instances we have to create a new one
if (null == Login)
Login = new Form1();
Login.Show();
// Close (and Dispose)
this.Close();
}
在您当前的代码中
...
Form1 Login = new Form1();
Login.Show();
...
您正在创建另一个 Form1
实例,而不是寻找已经创建的实例。