我是C#的新手。我读到关闭表格而不是隐藏可以免费记忆。但是,当我关闭表格时,它甚至会增加内存。具体来说,我有两种形式:Form1
和Form2
。当我成功登录用户时,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),并检查是否剩下一些对象。