第十二章 垃圾回收与资源管理

一、对象与内存

1.对象的生命周期

①垃圾回收(garbage collection)

·对象的铲除和归还内存给堆的过程叫做垃圾回收

·析构函数是实现销毁一个类的实例的方法成员

·析构函数是用于执行清楚操作的特殊方法

·CLR控制垃圾回收

2.析构函数

·有析构函数的对象占用的资源是较多,因为即使不需要它们,它们仍然会在内存中驻留较长时间,销毁过程作为独立的线程执行,该线程会占用大量资源

二、垃圾回收器

①垃圾回收器可以保证:

·每个对象都会被铲除,其析构函数都会被调用

·每个对象都被精确的铲除一次

·每个对象只在不被引用时被铲除

②垃圾回收器工作时间(自动控制):

·垃圾回收器只在对象不再需要的时候开始工作,但不是立即

·当它认为有用内存较少时

·当有一条命令需要分配很大的内存时

·可以通过程序调用System.GC.Collect()启动垃圾回收器

③垃圾回收器的工作机制

三、资源管理

1.资源释放

①垃圾回收器释放的是托管资源

②非托管资源需要手动释放

·使用Disposal()方法

·使用finally释放资源:用于异常时安全释放资源

·使用using释放资源:可以在达到using语句的末尾时,或者在该语句结束之前引发了异常并且控制权离开语句块时,退出using语句。可以有多个对象与using语句一起使用,但是必须在using语句里面声明。在using语句中声明的对象必须是实现了IDisposable接口的。

·Dispose方法是public,可以在任何事件中调用