本文主要是介绍c# Dispose资源释放,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
资源类型
托管资源:由CLR建立和释放
非托管资源:资源的建立和释放不禁CLR管理。好比IO、网络链接、数据库链接等等。须要开发人员手动释放。
如何释放
调用的是微软类库或者第三方类库,通常类库会提供释放的方法,即约定为Dispose,调用便可。
每一个类库固然能够提供各自释放资源的方法,好比close()、release()、clear()等等。微软提供了IDispose接口,其中只声明了一个void的Dispose()虚函数方法。并且还为实现了IDispose接口的类提供了using释放资源的语法糖。
调用时机:
继承IDispose接口的类,在其析构函数,调用了Dispose方法。所以会释放资源。但是回收的时间不定、顺序不定、线程不定。因此析构函数中调用Dispose只是一个保险措施,并不能代替手动释放资源。
所以在自定义的类,并且继承IDisposable接口的时候,重写虚函数Dispose,
并且新建带参数的Dispose函数,在该函数实现释放资源。
public class Foo: IDisposable
{
bool m_disposed = false;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!m_disposed)
{
if (disposing)
{
// Release managed resources
}
m_disposed = true;
}
}
延伸:
使用using 语句语句,在一定的范围内有效,除了这个范围时,自动调用IDisposable的Dispose函数释放掉资源。
这篇关于c# Dispose资源释放的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!