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