新手问个 C# 子窗体运行占用内存的问题。

nicholsky 2008-07-30 10:06:49
在一个form1里打开子窗体用new About1().showDialog(),然后dispose(),重复几十次会发现内存占用还是增加了。

但如果我只实例化一次about,以后每次只是close而不dispose,那么完全不会增加内存占用。

那请问,如果我要打开一些子窗体,是否最好只实例化一次,以后每次打开关闭,这样会更加好呢?因为我发现如果每次都new一个新的实例,哪怕释放了,还是看到内存不降下来。那大家打开子窗体是每次new然后dispose还是只实例化一次然后close的呢?感觉这些问题虽然很少,但对于一个程序来说很重要,向大家请教,谢谢指点,谢谢。
...全文
251 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicholsky 2008-07-30
  • 打赏
  • 举报
回复
那我就只new一次好了,不过我想问下隐藏是不是要在窗体的closing事件中设置?我现在直接关闭他,下次再showDialog(),同样可以,好像不用设置隐藏的吧,因为我发现直接关闭窗体B是不会dispose的,会不会是我用showDialog()打开B的原因?
睡神在睡觉 2008-07-30
  • 打赏
  • 举报
回复
不用new其实也可以找到你想要的窗体,只要遍历所有窗体就可以了,因为程序一启动就已经吧你程序中所有的窗体都实例化好了
qgj1655 2008-07-30
  • 打赏
  • 举报
回复
最好不要一直new,可以隐藏,要用的时候再显示
不过,你调用close时的时候应该系统会自动释放内存吧,
睡神在睡觉 2008-07-30
  • 打赏
  • 举报
回复
如果是在windows系统下,new一个实例b出来再close掉再new再close,理论上是没问题,但是如果你需要哪么多次的话,为什么不用隐藏?Hide()好像更实际,如果你每次打开b有不同的值传入b窗体,完全可以用变量传值,如果是每次加载控件不一样,完全可以动态添加窗体

如果是在wince或是mobile下来做这个动作建议用hide,一直new下去,的确会死机的
nicholsky 2008-07-30
  • 打赏
  • 举报
回复
楼上可能不知道我的意思,我的主窗体是A,我说的是子窗体B的close好像不会dispose的。

因为我不断打开B,关子B,我会发现内存不断增加,从20M增到80M,反正不断增加。

所以我想问下到底是我每次new一个B,然后dispose B这样好不好?还是只new一个B,然后只close B,以后每次就是调用已经实例化的B来进行打开和关闭好?哪个方法更好,不会长期下来占用太大内存。
睡神在睡觉 2008-07-30
  • 打赏
  • 举报
回复
C#的close方法已经是dispose的一个替代品了,所以close可以释放掉资源。
窗体的实例化是在程序一运行就已经实例化好的。
至于你说的内存资源释放不出来有可能是你程序中别的一些操作是系统不默认回收的垃圾,一直在占用内存,导致内存泄漏,可以用GC回收来解决
nicholsky 2008-07-30
  • 打赏
  • 举报
回复
up,只想看看大家的意见,打开窗体是每次都实例化好,还是只实例化第一次好。向大家请教下,谢谢。
睡神在睡觉 2008-07-30
  • 打赏
  • 举报
回复
其实,你showDialog,只要判断Dialog=ok就可以关闭的,你可以试试
nicholsky 2008-07-30
  • 打赏
  • 举报
回复
现在就是只实例化一次,内存不会怎么增加,谢谢大家。

111,119

社区成员

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

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

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