|
系列文章导航:
.NET Discovery 系列之一--string从入门到精通(上)
.NET Discovery 系列之二--string从入门到精通(勘误版下)
.NET Discovery 系列之三--深入理解.NET垃圾收集机制(上)
.NET Discovery 系列之四--深入理解.NET垃圾收集机制(下)
.NET Discovery 系列之五--Me JIT(上)
.NET Discovery 系列之六--Me JIT(下)
.NET Discovery 系列之七--深入理解.NET垃圾收集机制(拾贝篇)
上一节给大家介绍了 .NET GC的运行机制,下面来讲下与GC相关的重要方法。
第二节.GC关键方法解析
1.Dispose()方法
Dispose可用于释放所有资源,包括托管的和非托管的,需要自己实现。
大多数的非托管资源都要求手动释放,我们应当为释放非托管资源公开一个方法,实现释放非托管资源的方法有很多种,实现IDispose接口的Dispose方法是最好的,这可以给使用你类库的程序员以明确的说明,让他们知道怎样释放你的资源;而且C#中用到的using语句快,也是在离开语句块时自动调用Dispose方法。
这里需要注意的是,如果基类实现了IDispose接口,那么它的派生类也必须实现自己的IDispose,并在其Dispose方法中调用基类中Dispose方法。只有这样的才能保证当你使用派生类实例后,释放资源时,连同基类中的非托管资源一起释放掉。
插曲:使用using与try+finally的区别
可以说2者没有任何区别,因为using只是编辑器级的优化,它与try+finally有着相同的作用,以下是一段使用using的代码,它在IL阶段也是以try+finally呈现的:
C#:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using (DataSet ds = new DataSet())
{
}
}
}
NET技术:.NET Discovery 系列之四--深入理解.NET垃圾收集机制(下),转载需保留来源!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。