当前位置: 代码迷 >> C# >> 频繁new form()后内存越来越大咋回事
  详细解决方案

频繁new form()后内存越来越大咋回事

热度:10   发布时间:2016-05-05 03:45:18.0
频繁new form()后内存越来越大怎么回事?
程序频繁点击弹出详细信息的form,不一定点出多少个,所以每次都是new一个,看完了就关了,内存也就越来越大了
不是C#会自己回收吗,为什么,如何彻底释放。
------解决思路----------------------
disopose
或者用using包起来
------解决思路----------------------
你先要写一个测试,看看form实例的生存时间有多长(你所谓的“关”了之后15秒钟之后,是否还存在、还没有被GC回收)。

先把这方面的编程知识学会,在考虑你的那个问题。
------解决思路----------------------
越来越大就是没被回收,如果一直这样,只能说你虽然关了,但可能这个窗体还被其它地方调用着,导致GC无法释放
------解决思路----------------------
看完了就关了

你先确定所谓关了是close了还是hide了
------解决思路----------------------
msdn:-----Form.Close()

在以下两种情况下调用 Close 不会释放窗体:(1) 窗体是多文档界面 (MDI) 应用程序的一部分且是不可见的;(2) 您是使用 ShowDialog 显示的该窗体。在这些情况下,需要手动调用 Dispose 来将窗体的所有控件都标记为需要进行垃圾回收。
------解决思路----------------------
同样内容的窗体,名称起一样的,就不会出现多个了.

能达到....永远一个真实页面,只会对应一个窗体对象就解决你的问题了
------解决思路----------------------
如果没有动态添加的控件和非托管的对象,重复new只会在一段时间内不断增加内存,到一定量(与机器配置有关)后,就基本不再增加了,这是gc默认的回收策略导致的

具体的,你可以用Net MemoryProfiler工具扫描一下内存对象看看有没有泄漏的
------解决思路----------------------
引用:
我要点开多个,很多,看一会编辑下保存数据到数据库然后就关了

你确定内存问题是由于form引起的而不是从数据库读取的数据没释放?
------解决思路----------------------
尝试将引用窗体的变量赋值为null。
调用GC.Collect()手动回收内存。
------解决思路----------------------
引用:
这个也有,别人的代码,乱七八糟的 改了一部分数据库的,内存从4M变为3M一个窗体,

还有你打开的form有没有去监听主窗体上的事件,结果关闭的时候没有去掉监听
------解决思路----------------------
不一定 点出 多少个? 说不定  详细窗口有些操作 没有释放呢
------解决思路----------------------
窗体能占多少内存。。是数据泄露吧。
------解决思路----------------------
楼主还是要测时间长一点,也许大到一定程度就会突然变小的,可以开一个TIMER每秒开一个,开它200个再看结果.
  相关解决方案