C#中显式销毁对象

【转载】C#中显式销毁对象

对于非托管代码,显示地销毁对象是非常重要的。对于占用系统资源的托管代码,及时释放资源也非常重要,我们以往编写代码的时候,不是很注意整个系统中对象的存在与管理,造成了很大的系统资源浪费。因此,.NET平台中对象的销毁知识有必要进行回顾和总结。
一 销毁机制
    C#提供了垃圾回收器,可以不显示的销毁对象。但是如果要控制非托管对象,用完后显示地释放对象还是必须的。对非托管资源的隐式控制是由析构方法提供的,在对象销毁时由垃圾回收器调用。
 
二 析构方法原理
垃圾回收器维护一个含析构方法的对象列表,次列表在每次创建和销毁这种对象时都会更新。当这一列对象首次被回收时,会被放到一个队列中与其他在其中的对象一起等待销毁,在析构方法执行后,垃圾回收器会回收对象,并更新队列,即可以销毁列表。
 
声明C#析构方法可以用“~”符号。
 
 
三 析构方法与Dispose方法
显示的调用析构方法是不合法的,析构方法都需要由垃圾回收器调用,如果要出来昂贵的非托管资源,需要尽快关闭它,应该实现Idisposable接口,该接口要求实现者定义一个名为Dispose的方法,清除认为需要关闭的一切。
如果提供了dispose方法,就应该停止垃圾回收器调用对象的析构方法,要停止垃圾回收器,应该调用静态方法GC.SuppressFinalize(),将对象的this指针传给它,然后析构方法调用Dispose()方法。
 
四 Close方法
     让Close方法调用Dispose来实现。Dispose为私有的,Close为公有的。
 
五 Using语句
     为使得类的客户代码正确清除对象,using语句保证Dispose()会在尽可能最早的时刻调用,当执行到大括号结束时,Dispose方法自动对对象调用。

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