当前位置:编程学习 > C#/ASP.NET >>

C#做winform应用,子窗口消耗了太多资源,请问关闭的时候怎么能够清理子窗口占的资源呢?

我的问题是,关闭子窗口后,重新打开,内存越占越多,根本就没有销毁。
请问如何做才能彻底清除其占用的资源?
应该写哪个方法? --------------------编程问答-------------------- 手动dispose就可以了

===========================================================
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
本人说明:<我的帖子我做主,结贴率保持100%>
优惠接单开发,信誉保证,Q66840199(请注明业务/技术咨询) 
=========================================================== --------------------编程问答-------------------- 所有对象都占用系统资源,如内存、文件句柄和数据库连接。公共语言运行库 (CLR) 自动管理资源,通常不必考虑释放不需要的对象。但是,理解资源管理的工作原理能帮助您设计更有效的应用程序。

垃圾回收
CLR 使用名为垃圾回收的系统管理分配的资源。当应用程序中任何运行的代码都不再访问某对象时,系统垃圾回收器释放该对象的资源。垃圾回收算法是非确定性的,因此无法确定 CLR 释放对象资源的时间。下面各节介绍了 Visual Basic 中管理资源方式的一些更改。

将对象指定为 Nothing
Nothing 是一个关键字,Visual Basic 使用它指示对象变量不包含对对象的引用。早期版本的 Visual Basic 鼓励将未使用的对象指定为 Nothing,以取消对象变量与对象的关联并释放资源。现在仍可以将未使用的对象指定为 Nothing,但由于 Visual Basic 管理资源的方式,此进程并不保证立即释放这些对象。一般来说,仅应将共享成员或全局变量等长寿命的对象指定为 Nothing。

Dispose
有些对象支持名为 Dispose 的方法;其用途是更迅速地释放系统资源。支持 Dispose 方法的类必须实现 IDisposable 接口。当要释放对象资源时,需要显式调用 Dispose 方法。例如:

ThisObject.Dispose()

Finalize
有些类支持另一种方法 Finalize,在释放对象时该方法自动运行,而且可用于执行其他清理任务。Finalize 方法类似于在早期版本的 Visual Basic 中使用的 Class_Terminate() 方法。当某个对象变得不可访问后,CLR 将最终调用该对象的 Finalize 方法。由于垃圾回收算法是非确定性的,因此可能会立即调用 Finalize 方法,也可能会在几小时后调用。 

===========================================================
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
Email:loving-kiss@163.com
本人说明:<我的帖子我做主,结贴率保持100%>
优惠接单开发,信誉保证,Q66840199(请注明业务/技术咨询) 
=========================================================== --------------------编程问答-------------------- 显式调用 Dispose 方法,基本上就可以直接释放了;

否则就要等CLR来执行,就会比较慢; --------------------编程问答-------------------- Form.Dispose();
理论是这样,但实际根本没用,不知道内部怎么处理的 --------------------编程问答-------------------- dispose应该是可以的. --------------------编程问答-------------------- 是啊,DISPOSE()根本没用,我显式调用了。结果还是不断地占用内存。。。。 --------------------编程问答-------------------- 不会吧,那就检查一下你的程序。 --------------------编程问答-------------------- dispose 用处的确不太大,可能目前的GC还不太成熟吧

你手动调用  GC.Collect(); 试试 --------------------编程问答-------------------- 收藏
dispose好像我也没有试用成功
不知道为什么 --------------------编程问答-------------------- 显示调用dispose 只是销毁了托管的对象,你是不是还有非托管的对象? --------------------编程问答-------------------- up --------------------编程问答-------------------- using(form2 nform2=new form2)
{
    代码!
} --------------------编程问答-------------------- form.dispose(true) --------------------编程问答-------------------- .Net是不适合做Winform的喔 --------------------编程问答-------------------- 就这样就可以了
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,