黑马程序员技术交流社区

标题: C#释放资源 [打印本页]

作者: 杨磊    时间: 2012-2-3 08:56
标题: C#释放资源
假设有这么一条语句: int[] test=new int[100];
在使用完后如何释放它所占用的资源?谢谢。
我知道C#会自动回收资源。但有没有办法手动释放。就像很多类提供的dispose()方法那样

作者: 代剑    时间: 2012-2-6 22:40
楼主您好!这就是所谓.net 内存泄露问题。这个数组被你建出来了可是又没有使用,他仍旧占用内存.您可以采用楼上的办法GC.Collect()手动垃圾回收。
作者: 代剑    时间: 2012-2-6 22:40
本帖最后由 代剑 于 2012-2-6 22:46 编辑

补充说明一下 GC 是垃圾收集器 。 程序员不用担心内存管理 , 因为垃圾收集器会自动进行管理 。 GC 只能处理托管内存资源的
释放,对于非托管资源则不能使用 GC 进行回收,必须由程序员手工回收,一个例子就是 FileStream 或 者
SqlConnection 需要程序员调用 Dispose 进行资源的回收。
要请求垃圾收集,可以调用下面的方法: GC.Collection() 一般不需要手动调用 GC.Collection() 。加分的回答 : 有
一次用 OLEAutomation 的方式操作 Excel 的时候, Excel 经常不能正常退出,在 MSDN 网站上找到官方解答说
要调用一下 GC.Collection() ,至于为什么这样就可以也没找到答案。
作者: 肖腾宇    时间: 2012-3-1 08:37
手动释放资源可以用析构函数,和using关键字
析构函数用有~前缀的类名来声明
public class myClass
{
     ~myClass()
       {

       }
}

使用using 关键字的对象,在代码块的末尾自动调用Dispose方法

类名   自定义类名=new 类名();//实例华类

using 自定义类名
{
      ......
}



using 类名   自定义类名=new 类名();
{


......

}

作者: 刘亚中    时间: 2012-3-6 15:44
垃圾回收针对的是 对象堆中的资源,就是所谓的new的对象,而与之对应的是线程栈,线程栈不在垃圾回收的范围内!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2