本文主要是介绍C# 中的Dispose()用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、对Dispose方法的理解是什么呢?
使用Dispose方法的对象,应释放它拥有的所有资源。它还应该通过调用其父类型的Dispose方法释放其基类型拥有的所有资源。
.net的对象使用一般分为三种情况﹕
1.创建对象
2.使用对象
3.释放对象
如果是托管堆中申请的对象,垃圾收集器(Garbage Collector)会自动释放对象资源。如果使用非托管(unmanaged)的对象,就要实现IDisposable接口以释放资源。这个类型还必须添加一个作为防御机制的终结器。所有这些程序都把释放资源的工作委托给一个虚拟的方法,衍生的类可以根据自己的资源管理需求来重载该方法。只要衍生的类必须释放自己的资源,并且它必须调用该函数的基类版本的时候,它才需要重载这个虚拟方法。
二、原理
当垃圾收集器运行的时候,它立即从内存中删除所有不带终结器的垃圾对象。所有带有终结器的对象仍然存在于内存中。这些对象都被添加到终结队列,垃圾收集器引发一个新线程,周期性地在这些对象上运行终结器。在这些终结程序线程完成自己的工作之后,就可以从内存中删除垃圾对象了。需要终结的对象在内存中停留的时间比没有终结器的对象停留的时间长很多。但是你别无选择。如果要使程序有防护性,在类型包含非受控资源的时候,你必须编写一个终结器。但是也不用担心性能问题。下一步确保了客户端避免与终结相关的性能开销。
三、实例
public class Foo: IDisposable
{
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}protected virtual void Dispose(bool disposing)
{
if (!m_disposed)
{
if (disposing)
{
// Release managed resources
}// Release unmanaged resourcesm_disposed = true;
}
}~Foo()
{
Dispose(false);
}private bool m_disposed;
}
在.NET的对象中实际上有两个用于释放资源的函数:Dispose和Finalize。Finalize的目的是用于释放非托管的资源,而Dispose是用于释放所有资源,包括托管的和非托管的。
这篇关于C# 中的Dispose()用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!