发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
public class BaseResource: IDisposable {
// 非托管资源
private IntPtr handle;
// 托管资源
private Component Components;
// 对象是否已被释放的标志
private bool disposed = false; public BaseResource() { } // 释放资源,对外开放的可调用的方法 public void Dispose() {
// 释放资源
Dispose(true);
// 指示在析构函数中跳过垃圾回收
GC.SuppressFinalize(this); } // 释放资源,如果disposing为true,释放所有的托管资源和非托管资源,如果为false,则仅仅释放非托管资源,这主要是为了避免在析构函数中重复2次进行垃圾回收 protected virtual void Dispose(bool disposing) { // 检查该对象是否已经被释放了 if(!this.disposed) { if(disposing) {
// 释放托管资源
Components.Dispose(); }
// 释放非托管资源
CloseHandle(handle); handle = IntPtr.Zero; }
// 标记该对象为已被释放的对象
disposed = true; } // 析构函数,又名终结器 ~BaseResource() { // 释放非托管资源,在调用终结器方法时系统自动会对托管的资源进行垃圾回收 Dispose(false); } // 允许多次调用Dispose,但会抛出异常publicvoid DoSomething() { if(this.disposed) { thrownew ObjectDisposedException(); } } }
public void Close() { // 释放资源 Dispose(); }
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
C#技术漫谈之垃圾回收机制(GC)
如果Gen 0 heap内存达到阀值,则触发0代GC,0代GC后Gen 0中幸存的对象进入Gen1。如果Gen 1的内存达到阀值,则进行1代GC,1代GC将Gen 0 h...
.NET Framework 自动内存管理机制深入剖析 (C#分析篇) - syinter...
NET Framework 自动内存管理机制深入剖析 (C#分析篇) - syinter...* * public void Dispose() * * 该成员支持 .NET 框架结构,因此不适用于直接从代码中使用。...
.NET基础拾遗(1)类型语法基础和内存管理基础
①当每个包含Finalize方法的类型的实例对象被分配时,.NET会在一张特定的表结构中添加一个引用并且指向这个实例对象,暂且称该表为“带...
C# 托管资源和非托管资源
C# 托管资源和非托管资源。托管资源指的是.NET可以自动进行回收的资源,主要是指托管堆上分配的内存资源。//参数为true表示释放所有资源,只能由使用者调用 //参数为false表示释放非托管资源,只能由垃...
深入.NET托管堆(managed heap)
在.NET的所有技术中,最具争议的恐怕是垃圾收集(Garbage Collection,GC)了。作为.NET框架中一个重要的部分,托管堆和垃圾收集机制对我们中的大部分人来说是陌生的概念。在这篇文章中将要讨论托管堆,...
C# 托管资源与非托管资源
C# 托管资源与非托管资源。本来如果按照上面做法,非托管资源也能够由垃圾回收器进行回收,但是非托管资源一般是有限的,比较宝贵的,而垃圾回收器是由CRL自动调用的,这样就无法保证及时的释放掉非托...
C#释放资源
托管资源是由CLR全权负责的资源,CLR不负责的资源位非托管资源。也就是说,一个引用类型对象所占用的内存需要被GC回收,需要先成为垃圾。那么GC的工作大致是,查询内存中对象是否成为垃圾,然后对垃圾...
对.Net 垃圾回收的C#编程相关方面(Finalize 和Dispose(bool di...
net中using指令用法,using语句Dispose模式应用
net中using指令用法,using语句Dispose模式应用net中using指令用法,using语句Dispose模式应用 using指令的多种用法。要理解清楚使用using语句强制清理资源,就首先从了解Dispose模式说起,而要了解Di...
微信扫码,在手机上查看选中内容