日期:2014-05-17  浏览次数:20899 次

C#如何能手工释放一个托管对象?
例如
Object obj....
obj=null;
GC.Collect()
这样算是手工释放资源吗?

还是说我在一个类的Dispose函数里面写
member=null;

那么当我显示调用obj.Dispose的时候,GC也会自动执行去回收member?

而且,既然Dispose可以用于释放资源,那么什么情况必须依赖于析构函数(Finalize方法)呢?
谢谢。

------解决方案--------------------
既然可以自动回收,那就好好享受吧,楼主这么多虑不是自寻烦恼吗,入乡随俗吧!
------解决方案--------------------
前两个例子,如果obj和member没有其他引用的话,会被回收
最后一个问题回答不了
------解决方案--------------------
托管是什么意思?就是别人来管,你管不到。
------解决方案--------------------
首先.NET中的对象内存管理由垃圾回收器来进行回收的,调用GC.Collect()可以强制垃圾回收器来进行垃圾回收,因为垃圾回收器是到到内存规定的限制时才进行垃圾回收的,并不是某个对象不可用了就立即执行垃圾回收的,不过我们可以在代码中强制调用GC.Collect()来进行垃圾回收,不过不建议这样做,因为垃圾回收过程是一个复杂的过程,会影响到程序性能,而显示调用Disopose方法是时用来释放掉托管对象指向的非托管资源,如FileStream fs =new FileStream(filepath)代码,其中fs是一个托管对象,但是它指向的是一个硬盘上的具体文件,调用fs.Dispose()方法是显示用来释放非托管资源的,然后对于析构函数的调用,我们程序员不能控制其什么时候被调用,它的调用使用垃圾回收器来进行管理的,程序这边并不知道,关于垃圾回收器的更多内容可以参考CLR via C#中的垃圾回收器章节 
------解决方案--------------------
是的,不用管那么多了,有得用就行了。