为什么关闭窗体后内存会增加?

Why does memory increase after closing a form?

我对 C# 有点陌生。我读到关闭表单而不是隐藏可以释放内存。然而,当我关闭一个表单时,它甚至使内存增加。具体来说,我有两种形式:Form1Form2。当我成功登录用户时,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 实例,而不是寻找已经创建的实例。