首先介绍下关于C#的GC垃圾回收器,有了这个垃圾回收器c#的开发人员可以不用像C++开发人员那样关心垃圾回收!

但是GC是把双刃剑,GC仅仅对于托管资源进行管理,对非托管资源却无能为力,并且C#的开发人员也不太容易了解内部垃圾是何时回收的,这样就不利于管理!

下面是非托管资源,对于托管资源可以不太担心,但是编程时遇到非托管资源可要注意了!

有了上面的阐述,大家就可以很好的理解C#代码中为什么很少有析构函数,因为有了析构这个东东!

在C++编程中,析构是立即执行但是在C#中由于垃圾回收器的存在导致无法确定析构函数是何时执行的!

忘了说了一点,在没有析构函数的对象中垃圾回收器会一次性的把这些资源从内存中删除,当有了析构函数是需要两次才能删除掉内存中的东西,第一次调用析构函数并没有删除对象,第二次才真正的删除对象!  所以在C#很少有析构函数,,并且最重要的是频繁使用析构函数,则会执行更长时间的清理任务,对性能来说可能是致命的!

 

对于非托管资源,我们可以创建一个Close函数,然后在外界调用直接先清除非托管资源,然后在把对象=null;