关闭表单后为什么内存会增加?

时间:2017-09-29 09:10:45

标签: c# memory formclosing

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

close

2 个答案:

答案 0 :(得分:1)

从你的描述中你想回到已经创建的Form1,但我可以从这段简短的代码中看到你创建一个新表格。

Form1 Login = new Form1();

显示Form1时是否已发布旧Form2?也许旧的未正确发布?被贬低的部分代码并没有说明这一点。

您显示的代码太少,但您可以运行内存分析器(dotMemory,ANTS内存)并检查是否有一些不应该存在的对象。

答案 1 :(得分:1)

它应该是这样的:

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创建的实例。