C#如何进行对象的销毁和资源的释放?

 

1。对象的销毁不需要程序员来关心,垃圾回收机制会负责监控对象的使用状态,对象如果不被使用,则垃圾回收会在一定的内存使用情况下(一般是CLR认为内存不足,需要进行内存释放的时候),启动回收机制。

2
。对象在销毁之前,需要进行不同的操作(因为有可能程序员希望在销毁之前释放文件句柄或者数据库连接),所以可以适用对象的Finalize方法来释放这些资源(但在C#中,不允许这样操作,因此这句话为废话)。

3
。既然不能显示调用Finalize方法,我们可以通过一个别的办法来等效调用Finalize方法,这就是编写对象的析够函数(察看IL,对于析构函数的调用,其实也就是调用了Finalze方法)。这里就存在一个问题,为什么不能直接调用Finalze方法,究竟是出于一种什么目的?

4
。至此,对象在CLR进行销毁时,就可以对资源进行释放,但是问题来了,我们可能希望手动的进行资源释放,不希望等到对象被销毁时才释放,这时我们可以实现对象的IDispose接口。在Dispose方法中释放资源。

5
。问题又来了,如果我们手动的释放了资源,但是在Finalize方法里又对资源进行释放(因为垃圾回收会在销毁对象的时候调用这个方法,不管你之前是否调用了Dispose方法),显然不是我们希望的。对此,我们可以在Dispose方法里面使用GC.SuppressFinalize方法,保证垃圾回收不会重复的调用Finalize方法。

没有更多推荐了,返回首页