C#中Control内存释放问题
现在我的程序里有一个form会新建很多control,然后有一个设置功能,设置成功后会更新control。我现在做的方法是直接Controls.Clear();然后再重新...
现在我的程序里有一个form会新建很多control,然后有一个设置功能,设置成功后会更新control。
我现在做的方法是直接Controls.Clear();然后再重新初始化control,但是这样每次更新,内存都不会释放,大家有什么解决办法?
我也想过这种办法,不过这个程序里controls里的控件的属性是不能改的,所以只能Clear掉再重新初始化。
而且,设置并不只是设置controls里控件的顺序,还有删除原有的,增加新的,所以直接修改属性的话应该没有什么可行性。
有其他的解决办法么。。。? 展开
我现在做的方法是直接Controls.Clear();然后再重新初始化control,但是这样每次更新,内存都不会释放,大家有什么解决办法?
我也想过这种办法,不过这个程序里controls里的控件的属性是不能改的,所以只能Clear掉再重新初始化。
而且,设置并不只是设置controls里控件的顺序,还有删除原有的,增加新的,所以直接修改属性的话应该没有什么可行性。
有其他的解决办法么。。。? 展开
展开全部
你可以把不需要的控件Dispose掉,再重新添加,方法如下
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 100; i++)
{
PictureBox pic = new PictureBox();
pic.Size = new Size(100, 100);
pic.Location = new Point(10, 10);
this.Controls.Add(pic);
}
MessageBox.Show(this.Controls.Count.ToString());
int controls = this.Controls.Count;
for (int i = controls - 1; i >= 0; i--)
{
if (this.Controls[i] is Button && ((Button)(this.Controls[i])).Name == "button1")
{
continue;
}
this.Controls[i].Dispose();
}
MessageBox.Show(this.Controls.Count.ToString());
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 100; i++)
{
PictureBox pic = new PictureBox();
pic.Size = new Size(100, 100);
pic.Location = new Point(10, 10);
this.Controls.Add(pic);
}
MessageBox.Show(this.Controls.Count.ToString());
int controls = this.Controls.Count;
for (int i = controls - 1; i >= 0; i--)
{
if (this.Controls[i] is Button && ((Button)(this.Controls[i])).Name == "button1")
{
continue;
}
this.Controls[i].Dispose();
}
MessageBox.Show(this.Controls.Count.ToString());
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
.net内存释放通常是由系统控制的,你可以不必管它
像楼上说的
直接更改控件属性或执行方法、触发事件,像你那样还要面向对象的思想干什么
重写一个控件,用事件
像楼上说的
直接更改控件属性或执行方法、触发事件,像你那样还要面向对象的思想干什么
重写一个控件,用事件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Dispose
可以,注意不要在循环里声明变量。
可以,注意不要在循环里声明变量。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把它们Dispose()以后,调用GC.Collect()应该可以释放内存
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询