关闭表格后,为什么内存会增加



我是C#的新手。我读到关闭表格而不是隐藏可以免费记忆。但是,当我关闭表格时,它甚至会增加内存。具体来说,我有两种形式:Form1Form2。当我成功登录用户时,Form2将打开(内存为20MB)。Form2有一个按钮来注销用户,将其关闭并回到Form1(现在内存增加到41MB,并继续增加下一个用户)。我不知道为什么,有人可以帮助我吗?这是我对close Form2的代码2:

private void doctorLogoutBtn_Click(object sender, EventArgs e)
{
    imgBox.Image.Dispose();
    this.Dispose();
    Form1 Login = new Form1();
    Login.Show();
    this.Close();   
}

应该是这样的:

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实例,而不是寻找Alreday创建的实例。

从您的描述中,您想回到已经创建的Form1,但是我可以从此简短的代码中看到的是创建新表单。

Form1 Login = new Form1();

显示Form2时旧的Form1是否发布?也许旧的版本没有正确释放?变色的零件fo代码不会说明。

您显示的代码太少,无法确定,但是您可以运行一个内存探测器(dotmemory,ants memory),并检查是否剩下一些对象。

最新更新