WinForm 多文档,每次打开窗体后内存都会不断增大?求解.

火星大能猫 2011-07-27 05:28:10


Input.ReportInputFrm reportf = new Input.ReportInputFrm(this);
reportf.MdiParent = this;
reportf.WindowState = FormWindowState.Maximized;
reportf.Show();


主窗体打开子窗体,
每次打开子窗体后,任务管理器内存增大,
关闭窗体后,内存不会释放,再打开同一子窗体,内存增大.
why?
当然,最小化后内存就会自动释放了.
子窗体关闭事件里dispose依然无效
   private void ReportInputFrm_FormClosing(object sender, FormClosingEventArgs e)
{
this.Dispose();
GC.Collect();
}
...全文
698 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
火星大能猫 2011-07-29
  • 打赏
  • 举报
回复
杯具啊
isjoe 2011-07-28
  • 打赏
  • 举报
回复
别担心什么,只要内存不是持续上涨就没有问题。。
我写的MDI也是这样,高的时候会达到100M

GC啊啊。。。。。。。。
火星大能猫 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 davidlovelife 的回复:]

Dispose方法本身并不释放堆中的对象资源,而是执行组件内部的Dispose方法的代码,同时释放引用该对象的地址指针,该对象需要在垃圾收集器收集时其资源才被释放。
如下代码为例:
Button btn=new Button();
//use Button
btn.Dispose();
GC.Collect();
此时再看内存资源必定释放。
调Dispos……
[/Quote]
那么也就是不用去管他,垃圾收集器会自己释放的对么?

还有个问题,多文档窗体关闭需要不要dispose?看到有人说多文档和模式对话框必须要关闭的时候dispose才行,是么?
davidlovelife 2011-07-27
  • 打赏
  • 举报
回复
Dispose方法本身并不释放堆中的对象资源,而是执行组件内部的Dispose方法的代码,同时释放引用该对象的地址指针,该对象需要在垃圾收集器收集时其资源才被释放。
如下代码为例:
Button btn=new Button();
//use Button
btn.Dispose();
GC.Collect();
此时再看内存资源必定释放。
调Dispose方法本身并不释放对象资源,对象资源只能由垃圾收集器释放,而垃圾收集器只在创建新对象时堆中资源不足才被触发,所以才会遇到好像资源没有被释放的问题。
组件内的Dipose方法并没有调用垃圾收集器的收集资源方法。
Dispose方法在开发组件时主要用于关闭组件内打开其他资源。
希望能帮上你!!!
funxu 2011-07-27
  • 打赏
  • 举报
回复
C#的内存是自动管理的,就像java只在不够使用的时候或者空闲的时候才会释放,你打开窗体会申请,关闭未必就会立即释放哦
GC.Collect();这句话只是摆设,他是告诉垃圾回收器,你可以回收了,不过啥时候回收说不好哦
daifei4451 2011-07-27
  • 打赏
  • 举报
回复
手动释放内存
还有dispose方法内存释放也是要等一会的
还有尽量少new对象
每个对象都加一个释放的方法 然后去手动释放掉
在窗体关闭的时候 用一个析构函数去强制释放无关的内存

110,538

社区成员

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

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

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