1 / 10
文档名称:

C#内存释放.doc

格式:doc   大小:95KB   页数:10页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C#内存释放.doc

上传人:小s 2022/4/17 文件大小:95 KB

下载得到文件列表

C#内存释放.doc

相关文档

文档介绍

文档介绍:C#内存释放
默认分类2008-03-15 11:26:15 阅读470评论0 字号:大中小 订阅
便于对文章的开展,需要先明确两个概念
,会谈到托管这个概念。 底是什么意思called!" );
}
~DisposeClass()
{
( "Destructor called!" );
}
#region IDisposable Members
public void Dispose()
{
// TODO: Add implementation
( "Dispose called!" );
}
#endregion
}
对于 Close 来说不属于真正意义上的释放,除了注意它需要显示被调用外,我在此对 它不多说了。而对于析构函数而言,不是在对象离开作用域后立刻被执行,只有在关闭进 程或者调用 方法的时候才被调用,参看如下的代码运行结果。
private void Create()
DisposeClass myClass = new DisposeClass();
{
}
private void CallGC()
{
();
}
// Show destructor
Create();
( "After created!" );
CallGC();
运行的结果为:
After created!
Destructor called!
显然在出了 Create 函数外, myClass 对象的析构函数没有被立刻调用,而是等显示调用 才被调用。
对于 Dispose 来说,也需要显示的调用,但是对于继承了 IDisposable 的类型对象可 以使用 using 这个关键字,这样对象的 Dispose 方法在出了 using 范围后会被自动调用。 例如:
using ( DisposeClass myClass = new DisposeClass() )
}
//other operation here
如上运行的结果如下:
Dispose called!
那么对于如上DisposeCiass类型的Dispose实现来说,事实上GC还需要调用对象的析 构函数,按照前面的GC流程来说,GC对于需要调用析构函数的对象来说,至少经过两个 步骤,即首先调用对象的析构函数,其次回收内存。也就是说,按照上面所写的 Dispose 函数,虽说被执行了,但是 GC还是需要执行析构函数,那么一个完整的 Dispose函数,
(this ) 来告诉GC让它不用再调用对象的析构函数 中。 那么改写后的 DisposeCiass 如下:
/// <summary>
/// The class to show three disposal function
/// </summary>
public class DisposeClass:IDisposable
{