还是关于C#的释放内存问题,应该简单~~

kingstou 2009-06-10 11:54:30
新建的项目,有窗口FORM1,新建一个窗口FORM2
FORM1中有一个按钮,点击后执行如下代码:

for (int i = 0; i < 100; i++)
{
Form2 f = new Form2();
f.Show();
f = null;
}

打开100个FORM2窗口

FORM2窗口中有如下代码:

private void Form2_Load(object sender, EventArgs e)
{
Thread th = new Thread(run);
th.Start();
}

private void run()
{
Thread.Sleep(10000);
this.Close();
this.Dispose();
}

窗口Form2在显示10秒后关闭。

执行程序后,占用内存10056K,打开100个窗口后占用12928K,关闭100个窗口后占用内存12172K。
尝试使用GC.Collect();强制释放内存,未生效。
当多次点击按钮后,内存占用会越来越高,请问这种情况应该怎么解决?
...全文
3190 49 打赏 收藏 转发到动态 举报
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangshuhang2000 2012-08-20
  • 打赏
  • 举报
回复
看看说明 。
Net_JC1 2011-11-25
  • 打赏
  • 举报
回复
我也遇见个这样的问题!!!
杯具啊~!!
点一下100M啊 !!
太杯具了!点不了几下就 溢出了!
GooKit 2011-10-25
  • 打赏
  • 举报
回复
強烈關注!!
fx_blog 2010-10-23
  • 打赏
  • 举报
回复
杯具...
kingstou 2009-06-15
  • 打赏
  • 举报
回复
顶上来等高手来回答。

因为我有做一个要打开很多窗口的程序,当运行到一定的时间的时候,内存占用会变得奇大无比,但是你不可能让用户自己去最小化窗口或重新开程序吧。

希望高手来解决。
yang1216 2009-06-11
  • 打赏
  • 举报
回复
难道没有高手来回答。
zlb789 2009-06-11
  • 打赏
  • 举报
回复
关注
msnadair 2009-06-11
  • 打赏
  • 举报
回复
接分
rainsome 2009-06-11
  • 打赏
  • 举报
回复
学习
xp1056 2009-06-11
  • 打赏
  • 举报
回复
mark
EsMo 2009-06-10
  • 打赏
  • 举报
回复
mark 如果用来写服务器,这个问题应该怎么解决..
lovvver 2009-06-10
  • 打赏
  • 举报
回复
如果内存仍然没有回收,可以强制回收:
GC.Collect();
lovvver 2009-06-10
  • 打赏
  • 举报
回复
private void Form2_Load(object sender, EventArgs e)
{
WaitCallback wcb = delegate { run(); };
ThreadPool.QueueUserWorkItem(wcb);
}

lovvver 2009-06-10
  • 打赏
  • 举报
回复
使用ThreadPool来限制在实例化线程所带来的累积开销。
binhu12332100 2009-06-10
  • 打赏
  • 举报
回复
来学习的
kingstou 2009-06-10
  • 打赏
  • 举报
回复
5楼,经测试,你的代码不管用~~
feiyun0112 2009-06-10
  • 打赏
  • 举报
回复
private delegate void DelegateCloseForm();
private void CloseForm()
{
if (this.InvokeRequired)
{
this.BeginInvoke(new DelegateCloseForm(CloseForm));
}
else
{
this.Close();
this.Dispose();
}
}
private void run()
{
Thread.Sleep(10000);
CloseForm();
}

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

http://feiyun0112.cnblogs.com/
honkerhero 2009-06-10
  • 打赏
  • 举报
回复
GC.Collect();并不会立即释放内存。

C#里面的内存释放是不可控的
zyhappy1688 2009-06-10
  • 打赏
  • 举报
回复
帮顶下
yangjiang113 2009-06-10
  • 打赏
  • 举报
回复
using()
{

}
在就是用Gc了
我怎么感觉你那线程怪怪的。
加载更多回复(28)

110,536

社区成员

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

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

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