winform 容器内存泄漏

循环中释放容器时调用Dispose()方法会销毁对象,导致容器的个数变化。

正确示例
//方法一

for
(int i = this.flowLayoutPanel1.Controls.Count-1; i >=0; i--) { this.flowLayoutPanel1.Controls[i].Click -= btnClick; this.flowLayoutPanel1.Controls[i].Dispose(); }

//方法二
int ctlNum = this.flowLayoutPanel1.Controls.Count;
            for (int i = 0; i < ctlNum; i++)
            {
                this.flowLayoutPanel1.Controls[0].Click -= btnClick;
                this.flowLayoutPanel1.Controls[0].Dispose();
            }


错误示例  
两种方式都因在循环中修改了循环条件,导致内存泄漏
        foreach (var ctl in this.flowLayoutPanel1.Controls)
            {
                (ctl as Control).Click -= btnClick;
                (ctl as Control).Dispose();
            }
 
            for (int i = 0; i < this.flowLayoutPanel1.Controls.Count; i++)
            {
                this.flowLayoutPanel1.Controls[i].Click -= btnClick;
                this.flowLayoutPanel1.Controls[i].Dispose();
            }
 

 

posted @ 2019-07-24 23:09  足天  阅读(540)  评论(0编辑  收藏  举报