首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

循环创建控件,怎么释放控件内存

2012-04-16 
循环创建控件,如何释放控件内存现在的问题是:每执行一次下面的代码,内存就增加,如何释放控件内存。有一个Ti

循环创建控件,如何释放控件内存

现在的问题是:每执行一次下面的代码,内存就增加,如何释放控件内存。

有一个Timer,定时执行下面的代码。

代码如下:

C# code
int row = 1;            int columnNum = 5;            int width = 217;            int height = 266;            int left = 20;            int top = 16;  for (int z = 0; z < groupPanel5.Controls.Count; z++)                {                    Control c = groupPanel5.Controls[z];                   foreach (Control cc in c.Controls)                        cc.Dispose();                    groupPanel5.Controls.RemoveAt(z);                    c.Dispose();                 }                groupPanel5.Controls.Clear();                GC.Collect();                foreach (ServersInfo sv in servs)                {                    DevComponents.DotNetBar.PanelEx pe = new DevComponents.DotNetBar.PanelEx();                   DevComponents.DotNetBar.Controls.ReflectionImage refimage = new DevComponents.DotNetBar.Controls.ReflectionImage();                    refimage.Location = new System.Drawing.Point(0, 0);                    refimage.Name = "refimage" + sv.ID.ToString();                    refimage.Size = new System.Drawing.Size(217, 125);                    refimage.Tag = pe;                    pe.Name = "panelEx_Server" + sv.ID.ToString();                    pe.Tag = sv;                    pe.Size = new Size(width, height);                    if (i % columnNum == 0)                    {                        if (i != 0)                            row++;                        pe.Location = new Point(left, (row - 1) * height + top * row);                    }                    else                    {                        if (row == 1)                        {                            pe.Location = new Point(i * width + (i + 1) * left, top);                        }                        else                        {                            pe.Location = new Point((columnNum - (((row * columnNum) - 1) - i) - 1) * width + (columnNum - (((row * columnNum) - 1) - i)) * left, (row - 1) * height + top * row);                        }                    }                    DevComponents.DotNetBar.Controls.ReflectionLabel reflabel_Serverinfo = new DevComponents.DotNetBar.Controls.ReflectionLabel();                    reflabel_Serverinfo.Location = new System.Drawing.Point(0, 100);                    reflabel_Serverinfo.Name = "reflabel" + sv.ID.ToString();                    reflabel_Serverinfo.Size = new System.Drawing.Size(217, 65);                    DevComponents.DotNetBar.Controls.ReflectionLabel reflabel = new DevComponents.DotNetBar.Controls.ReflectionLabel();                    reflabel.Location = new System.Drawing.Point(0, 100);                    reflabel.Name = "reflabel" + sv.ID.ToString();                    reflabel.Size = new System.Drawing.Size(217, 63);                      pe.Controls.Add(reflabel);                    pe.Controls.Add(reflabel_Serverinfo);                    pe.Controls.Add(refimage);                    this.groupPanel5.Controls.Add(pe);                    Application.DoEvents();                                  i++;                }


[解决办法]
高手在忙着赚钱,菜鸟才来混论坛。
[解决办法]
探讨
高手在忙着赚钱,菜鸟才来混论坛。

[解决办法]
net自己的GC已经会回收的
如果你硬是不放心
就自己调用 GC.Collect() 强制释放

热点排行