使用如下代码打开一个窗体:
        public void Info()
        {
            zForm form = new zForm();
            form.ShowDialog();
            //form.Dispose();
            //form = null;
            //System.GC.Collect();
        }
请问:
//form.Dispose();
//form = null;
//System.GC.Collect();
哪种方式能对zForm 窗体中的所有使用资源(变量、dataset等)进行回收呢?还有如果使用COM封装c#的话,以上哪种方式能回收资源??

解决方案 »

  1.   

    你又要打开窗体,怎么还要释放他啊??
    form.Dispose(); 就可以了
    System.GC.Collect(); 强制回收,一般不这样调用,因为不是非托管的
    form = null; 好像也可以,就是说等到垃圾回收调用时候,因为变量为null没有引用了,就可以被回收
    但是时间不确定
      

  2.   

    一般用form.Dispose(); 就可以了
      

  3.   


    使用COM方式封装c#的,封装后的程序,需要在C++中调用的;这样的封装方式,C#的资源管理是非托管的,还是托管的?form.ShowDialog(); 方式打开窗体,想法是希望在结束这个窗体后,回收全部不用的资源,那么使用form.Dispose(); 
    可以回收窗体中使用到的全部资源么?
      

  4.   

    如果你看过Effective C#之类的书,对于Dispose模式有一定的了解,你会知道调用Dispose是最好的。GC.Collect()也可以回收,因为正确实现Dispose的对象都带有Finalizer会确保资源释放。至于赋值null,那么资源还是处于占用状态,直到GC有空去回收它。总体来说,Dispose的开销最小。但是请注意,Dispose模式主要处理的是非托管的资源,这部分CLR的GC不可能替你回收(会造成内存泄漏)。托管的资源还是由GC自己处理,不需要操心。