什么情况下需要自己写dispose,finalize方法是不是.NET类库里面所有的类都实现了自己的这两个方法,释放非托管资源

解决方案 »

  1.   

    如果类里使用了非托管资源就应该指定 dispose finalize
    .net 自带的都有这些保障
      

  2.   

    help:如果 Object 保存了对任何资源的引用,则 Finalize 必须由派生类重写,以便在垃圾回收过程中,在放弃 Object 之前释放这些资源。
      

  3.   

    当你使用了非托管资源的时候就应该释放。
    常见如Stream、WebResponse、Reader等这些资源的时候,用完了就应该close或者dispose
      

  4.   

    说的太简单了!!!能不能解释的详细点能不能举个例子Stream这种类,我不调用Dispose,,资源就不能被释放吗?
      

  5.   


    例如:
    Stream fs = new FileStream("C:\\test.txt",FileMode.OpenOrCreate);
    如果你不fs.Close();那么你到C盘去看,那个文件就是删不掉的。
    当你fs.Close();以后,文件立马就可以删掉了。
      

  6.   

    dispose,finalize方法一般是系统自动调用的,不建议重写finalize方法,因为这个方法什么时候被执行是个未知数。
    我在另一个帖子里也说过了,所有Stream类型,都不要调用Dispose,应该调用Close()。只有当MSDN上面强制指明的类型需要显示调用Dispose的,才需要考虑显示调用,否则一般无需调用。
    下面例举2个必须调用Dispose的类型:Bitmap、Form。另外即使你不调用Dispose,对象也不是不能释放,Dispose是立即释放,而.NET的内存管理会查看对象引用,如果没有任何引用了(某个局部变量离开了作用域),也是能够被释放的,但是何时释放就不得而知了(在垃圾回收器调用对象的 Finalize 方法之前,正在使用的资源不会被释放)。