C# 释放或清除已创建的对象
我有两个windows窗体Form1.cs和Form2.cs 下面是Form1.cs的代码,其中将显示Form2.cs并隐藏当前Form1.csC# 释放或清除已创建的对象,c#,windows,winforms,forms,C#,Windows,Winforms,Forms,我有两个windows窗体Form1.cs和Form2.cs 下面是Form1.cs的代码,其中将显示Form2.cs并隐藏当前Form1.cs private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.Show(); this.Hide(); } private void button1_Click(object sender, EventArgs e) {
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
this.Hide();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
this.Hide();
}
以下是Form2.cs的代码,其中将显示Form1.cs并隐藏当前Form2.cs
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
this.Hide();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
this.Hide();
}
我已经监控了应用程序的内存使用情况,并注意到每次执行上述代码时,应用程序的内存使用情况都在增加。您在每次单击按钮时都会创建新表单,因此在多次单击按钮后,您会在内存中保留许多实例 您可能正在查找而不是
this.Hide()
,因为前者将关闭并处理当前表单,而后者仅将其隐藏
如果要隐藏并重新显示表单,则需要保留对表单的引用。有很多考虑因素(一个表单应该只实例化一次,还是每次被请求?是否可以打开同一表单的多个实例?等等)以及可能的模式和(第三方)解决方案(例如)
一种解决方案是只需创建自己的表单注册表,其中每个表单都有一个单例:
public static class FormRegistry
{
private static Lazy<Form1> _form1 = new Lazy<Form1>(() => new Form1());
public static Form1 Form1
{
get
{
return _form1.Value;
}
}
private static Lazy<Form2> _form2 = new Lazy<Form2>(() => new Form2());
public static Form2 Form2
{
get
{
return _form2.Value;
}
}
}
公共静态类FormRegistry
{
private static Lazy _form1=new Lazy(()=>new form1());
公共静态表单1表单1
{
得到
{
返回_form1.Value;
}
}
private static Lazy _form2=new Lazy(()=>new form2());
公共静态表单2表单2
{
得到
{
返回_form2.Value;
}
}
}
然后,在代码中的任何地方,都可以执行
FormRegistry.Form1.Show()
。请注意,此代码是一个概念验证,有许多问题和改进空间,但它可以为您提供总体思路。确切地说,您的问题是什么?新-“最近或现在首次生产、介绍或发现;以前不存在。”这正是我要寻找的。谢谢,我会研究一下这个概念。