求教用户控件释放问题

dabaicai 2012-11-21 05:17:49
动态生成用户控件,定时检查设定刷新,
先删再加
for (int k = panel.Controls.Count-1; k>=0; k--)
{
Control ctrl = panel.Controls[k];

if (ctrl is martScale)
{
panel.Controls.Remove(ctrl);
((martScale)ctrl).Dispose();
//ctrl = null;
//GC.Collect();
}
}
删除后重新生成用户控件
结果进程占用的内存越来越大,并没有被释放?
怎么办?
我这是个监控的东西,要一直开着的,内存一直涨受不了啊
...全文
193 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dabaicai 2012-11-26
  • 打赏
  • 举报
回复
dabaicai 2012-11-22
  • 打赏
  • 举报
回复
((martScale)ctrl).OnTestLink -= new martScale.OnTestLinkDelegate(scale_OnTestLink); ((RTmartScale)ctrl).Dispose(); 内存还是在涨
dabaicai 2012-11-22
  • 打赏
  • 举报
回复
哦,确实,我用户控件中使用了委托,动态生成并实现,如何解决?楼上老大
宝_爸 2012-11-22
  • 打赏
  • 举报
回复
是不是这个原因: If you have a UserControl which you add dynamically to your form and if you attach events dynamically to this UserControl using: ucMyControl.btnSave.Click += new EventHandler(btnSave_Click); and if you are removing you UserControl from the form using Controls.Clear() method then you must first remove all attached events before removing your UserControl using ucMyControl.btnSave.Click -= new EventHandler(btnSave_Click); 来自: Managing memory leaks in WinForms application http://tech.avivo.si/2010/12/managing-memory-leaks-in-winforms-application/
dabaicai 2012-11-22
  • 打赏
  • 举报
回复
因为我这个是用来监控的,通过设定增加了设备或者删除了设备,要体现出来,所以定时一分钟刷一次(每分钟要刷状态,同时体现设备的增删),就是全删除再生成 现在的问题就是,程序的使用内存不断增加,不知道怎么回事
gomoku 2012-11-21
  • 打赏
  • 举报
回复
控件一般不是这样使用的。 比如Label控件,常见的是改变它的文字,或者改变它的位置。而不是删除后重新生成一个新的。 一般你要使你的控件能根据数据而更新显示(包括改变文字,位置,大小,自定义画图等等),而不是'删除/生成'的方式。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧