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;
}
}
事实上我们不知道,他到底什么时候调用,而且也不能认为显示的调用析构函数。如果我们的系统需要他,则我们必须也要
为系统提供,系统会在对象从托管的堆中移走之前的某点调用它。
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;
}
}
相关文章推荐
- c#验证码
- C# winform 程序独立运行(脱离 .NET Framework运行,绿色运行)
- C# ~ 从 XML 到 Linq 到 Linq to XML
- C# ~ 从 XML 到 Linq 到 Linq to XML
- C# 模拟 鼠标 键盘操作
- C# protobuf的使用方法
- C# Math.Round
- c#打印(转)
- c# XML省市联动
- (整理)C#基础知识_泛型的实现
- C# DataGridViewButtonColumn的使用—动态改变按钮的文本
- C#开发中IrisSkin2.dll如图添加到工具箱
- C#重绘DataGridView行
- c#入门第一章
- C# Sort排序
- halcon与C#混合编程
- C# j基本操作-拷贝文件夹的所有内容到另一个文件夹内: 复制代码 1 public static void CopyDir(string srcPath, string实现文件夹的复制以及删除
- C#中的String类型转换
- C#Socket通信
- C# Interface