您的位置:首页 > 编程语言 > C#

c#中垃圾回收机制

2016-05-20 10:53 357 查看
析构函数执行在类的实例被销毁之前清理或释放托管资源,与c++的析构函数不同,c#的析构函数不在实例失效时立即执行。

事实上我们不知道,他到底什么时候调用,而且也不能认为显示的调用析构函数。如果我们的系统需要他,则我们必须也要

为系统提供,系统会在对象从托管的堆中移走之前的某点调用它。

1.如果我们的代码中包含了需要及时清理的非托管资源,不要把它仅仅交给析构函数去处理,因为这样不能够即时清理它,我

们应该在类中实现名为IDispose的接口,接口将资源的清理代码封装在一个void 型的无参数方法Dispose中。

2.因为Dispose做清理而不是析构函数,所以应当调用GC.SuppressFinalize(),调用方法告诉CLR不要调用该方法的析构函数,

应为资源已经被清理了。

Class MyClass:IDispose
{
bool disposed=false;
public void Dispose()
{
Dispose(true);
GC.SuppressFinallize();
}
~MyClass(){Dispose(false)};
protected virtual void Dispose(bool disposing)
{
if(disposed==false)
{
if(disposing)
{
//清理托管资源
}
//清理非托管资源
}
disposed=true;
}
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: