摘要:
与C++一样,C#可以定义析构函数。但C#的析构函数主要用于释放托管资源。在Net中,由GC垃圾回收线程掌握对象资源的释放,程序员无法掌控析构函数的调用时机。为了完全掌控非托管资源的释放,Net提供一个IDisposable接口。 问题:Finalize()和Dispose()之间的区别? 最简单的 阅读全文
摘要:
托管资源一般是指被CLR控制的内存资源,这些资源的管理可以由CLR来控制,例如程序中分配的对象,作用域内的变量等等。而非托管资源是CLR不能控制或者管理的部分,这些资源很多,例如文件流,数据库的连接,系统的窗口句柄,打印机资源等。这些资源一般情况下不存在与Heap中。 CLR的GC功能只能释放托管资源,而对非托管资源,它不知道如何去释放它。这样就会出现当资源用尽时不能提供资源能够提供的服务,windows的运行速度就会变慢。所以,当我们在类中封装了对非托管资源的操作时,我们就需要显示或者隐式地释放这些资源。这里就分别会用到Finalize和Dispose方法。Finalize一般用于基类不带. 阅读全文