C#中Control内存释放问题

2024-12-15 10:37:52
推荐回答(5个)
回答1:

最好的解决方法是不要Clear这些控件
而是For一遍,更改掉控件的属性

Clear最大的问题并不止是内存不释放,还有创建控件时占用的资源及主界面线程

补:
如果有删除的可以将原控件隐藏,增加就将之显示就好了,这样好些
属性有些虽然是只读但是一定可以修改的,这个可以通过其它方法来实现

回答2:

你可以把不需要的控件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());
}

回答3:

.net内存释放通常是由系统控制的,你可以不必管它
像楼上说的
直接更改控件属性或执行方法、触发事件,像你那样还要面向对象的思想干什么

重写一个控件,用事件

回答4:

Dispose
可以,注意不要在循环里声明变量。

回答5:

把它们Dispose()以后,调用GC.Collect()应该可以释放内存