最佳策略

大部分内容是看书所做笔记,放上来只为温习。

最佳的资源清理策略,应该是同时实现 Finalize 方式和 Dispose方式。一方面,Dispose方法可以克服Finalize 方法在性能上的诸多弊端;另一方面,Finalize 方法又能够确保没有显式调用 Dispose 方法时,也自行回收使用的所有资源。事实上,.NET 框架类库的很多类型正是同时实现了这两种方式,例如FileStream等。因此,任何重写了 Finalize 方法的类型都应实现 Dispose 方法,来实现更加灵活的资源清理控制。

using语句简化了资源清理代码实现,并且能够确保 Dispose 方法得到调用,因此值得推荐。

凡是实现了Dispose模式的类型,均可以 using语句来定义其引用范围

{

规则所在

对于Finalize 方法和 Dispose 方法,有如下的规则,留作参考:

对于非托管资源的清理,FinalizeGC自行调用,而Dispose由开发者强制执行调用。

尽量避免使用Finalize方式来清理资源,必须实现Finalize时,也应一并实现 Dispose方法,来提供显式调用的控制权限。

通过GC. SuppressFinalize可以免除终结。

垃圾回收时,执行终结器的准确时间是不确定的,除非显式的调用Dispose或者 Close方法。

强烈建议不要重写Finalize方法,同时强烈建议在任何有非托管资源访问的类中同时实现终止化操作和Dispose模式。

l  Finalize方法和Dispose方法,只能清理非托管资源,释放内存的工作仍由GC负责。

对象使用完毕应该立即释放其资源,最好显式调用 Dispose方法来实现

}

原文地址:https://www.cnblogs.com/jiebian/p/3409751.html