c# 中内存释放的问题----在线等,高手来

laokaizzz 2009-11-13 02:45:25
在MDI窗体中每添加一个子窗体就增加内存,关闭子窗体,内存并不减少,我想关闭子窗体,立刻释放该窗体占用的内存,高手教教,谢谢

(我让子窗体=null,再调用GC.Collect()也是不管用)
我看内存是在资源管理器里看。
...全文
199 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
laokaizzz 2009-11-13
  • 打赏
  • 举报
回复
不解释了么?不过回答到这,也够了,谢了,结贴
laokaizzz 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 qlzf11140820 的回复:]
引用 8 楼 laokaizzz 的回复:
引用 3 楼 sisen 的回复:
.net是托管的。无论你如何GC,怎么Dispose,该回收的东西,都是收CLR进行的。.net里提供的GC并不能如C++那样能起到实质的作用。
建议:
所有对象在使用之后,及时Dispose。内存在使用达到一定程度后,CLR会自动帮你回收。


知道会自动回收,我要的效果是即时回收,我点击关闭,内存就立刻回收了

System.Diagnostics.Process.GetCurrentProcess().MinWorkingSet lz试试
[/Quote]


这样是可以的,给他设置一个低点的值,我也曾经看到过这样的文章,但是上面说要动态的改变这个值的大小,否则会出问题,不知道是不是
laokaizzz 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 agentianle 的回复:]
托管内存的释放,设为null之后,两次调用GC试试
[/Quote]

不行的
qldsrx 2009-11-13
  • 打赏
  • 举报
回复
一般连续调用两次GC.Collect()就可以释放了,如果还不行,那就是你内存泄漏了。
cicigl 2009-11-13
  • 打赏
  • 举报
回复
恩,自己处理,而且很快
qlzf11140820 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 laokaizzz 的回复:]
引用 3 楼 sisen 的回复:
.net是托管的。无论你如何GC,怎么Dispose,该回收的东西,都是收CLR进行的。.net里提供的GC并不能如C++那样能起到实质的作用。
建议:
所有对象在使用之后,及时Dispose。内存在使用达到一定程度后,CLR会自动帮你回收。


知道会自动回收,我要的效果是即时回收,我点击关闭,内存就立刻回收了
[/Quote]
System.Diagnostics.Process.GetCurrentProcess().MinWorkingSet lz试试
天乐 2009-11-13
  • 打赏
  • 举报
回复
托管内存的释放,设为null之后,两次调用GC试试
laokaizzz 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sisen 的回复:]
.net是托管的。无论你如何GC,怎么Dispose,该回收的东西,都是收CLR进行的。.net里提供的GC并不能如C++那样能起到实质的作用。
建议:
所有对象在使用之后,及时Dispose。内存在使用达到一定程度后,CLR会自动帮你回收。
[/Quote]

知道会自动回收,我要的效果是即时回收,我点击关闭,内存就立刻回收了
天乐 2009-11-13
  • 打赏
  • 举报
回复
另外,关注一下在窗体内是否使用到了其他的非托管资源,如调用COM、非托管动态库等

如果有,请在Form Close之前,释放之
qlzf11140820 2009-11-13
  • 打赏
  • 举报
回复
clr会处理的
ibobo023 2009-11-13
  • 打赏
  • 举报
回复
learning~
guyehanxinlei 2009-11-13
  • 打赏
  • 举报
回复
UP
sisen 2009-11-13
  • 打赏
  • 举报
回复
.net是托管的。无论你如何GC,怎么Dispose,该回收的东西,都是收CLR进行的。.net里提供的GC并不能如C++那样能起到实质的作用。
建议:
所有对象在使用之后,及时Dispose。内存在使用达到一定程度后,CLR会自动帮你回收。
laokaizzz 2009-11-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hide1984 的回复:]
不要用form.close()方法。
用form.dispose();

"我让子窗体=null,再调用GC.Collect()也是不管用"
如果是非托管资源,GC.Collect()是没有用的,GC只能回收托管资源。
[/Quote]

试过了form.dispose()方法,不管用,form窗体时托管资源还是非托管资源呢
Hide1984 2009-11-13
  • 打赏
  • 举报
回复
不要用form.close()方法。
用form.dispose();

"我让子窗体=null,再调用GC.Collect()也是不管用"
如果是非托管资源,GC.Collect()是没有用的,GC只能回收托管资源。

110,566

社区成员

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

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

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