C#中Control内存释放问题

现在我的程序里有一个form会新建很多control,然后有一个设置功能,设置成功后会更新control。我现在做的方法是直接Controls.Clear();然后再重新... 现在我的程序里有一个form会新建很多control,然后有一个设置功能,设置成功后会更新control。
我现在做的方法是直接Controls.Clear();然后再重新初始化control,但是这样每次更新,内存都不会释放,大家有什么解决办法?
我也想过这种办法,不过这个程序里controls里的控件的属性是不能改的,所以只能Clear掉再重新初始化。
而且,设置并不只是设置controls里控件的顺序,还有删除原有的,增加新的,所以直接修改属性的话应该没有什么可行性。
有其他的解决办法么。。。?
展开
 我来答
重典技术闲话
2009-11-02 · TA获得超过2173个赞
知道大有可为答主
回答量:2593
采纳率:0%
帮助的人:1154万
展开全部
最好的解决方法是不要Clear这些控件
而是For一遍,更改掉控件的属性

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

补:
如果有删除的可以将原控件隐藏,增加就将之显示就好了,这样好些
属性有些虽然是只读但是一定可以修改的,这个可以通过其它方法来实现
dkxpsg
2009-11-01 · TA获得超过1628个赞
知道小有建树答主
回答量:592
采纳率:0%
帮助的人:1047万
展开全部
你可以把不需要的控件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());
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
202261256487e6a
2009-11-03 · TA获得超过481个赞
知道小有建树答主
回答量:795
采纳率:0%
帮助的人:690万
展开全部
.net内存释放通常是由系统控制的,你可以不必管它
像楼上说的
直接更改控件属性或执行方法、触发事件,像你那样还要面向对象的思想干什么

重写一个控件,用事件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
老级幸1286
2009-11-09 · TA获得超过511个赞
知道小有建树答主
回答量:756
采纳率:0%
帮助的人:386万
展开全部
Dispose
可以,注意不要在循环里声明变量。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
moneyin
2009-11-01 · TA获得超过1万个赞
知道大有可为答主
回答量:7930
采纳率:0%
帮助的人:2563万
展开全部
把它们Dispose()以后,调用GC.Collect()应该可以释放内存
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式