如何实现真正的IDispose?
2011-12-15 11:13
155 查看
最近在项目开发的过程中, 我们的一个数据同步程序碰到了资源无法释放的问题。我使用的定位方法是性能计数器(Perfmon.msc), 显然这只是一个很粗矿的判断。后通过Code Review我们的代码中定义了一个同步的中间类, 该类中会缓存大量的中间数据集。而程序中么有及时的回收这些临时对象, 最终我建议该类实现一下IDispose接口。这里我结合网上的资料以及MSDN的建议实现了一个标准的IDispose接口, 代码如下:
View Code
View Code
public class SampleClass : System.IDisposable { private bool alreadyDisposed=false; //供程序员显式调用的Dispose方法 public void Dispose() { //调用带参数的Dispose方法, 释放托管和非托管资源 Dispose(true); //手动调用了Dispose释放资源,那么析构函数就是不必要的了, 这里阻止GC调用析构函数 System.GC.SuppressFinalize(this); } //protected的Dispose方法, 保证不会被外部调用。 //传入bool值disposing以确定是否释放托管资源 protected void Dispose(bool disposing) { if (alreadyDisposed) return; //保证不重复释放 if (disposing) { ///TODO:在这里加入清理"托管资源"的代码, 应该是xxx.Dispose(); } ///TODO:在这里加入清理"非托管资源"的代码 alreadyDisposed=true; } //供GC调用的析构函数 ~SampleClass () { Dispose(false);//释放非托管资源 } }
相关文章推荐
- 如何实现在类中定义真正的const成员变量
- asp如何实现真正的动态包含(include)
- 如何实现在类中定义真正的const成员变量
- 透过现象看本质:如何真正实现数据可视化?
- Retina屏的移动设备如何实现真正1px的线
- 如何才能更好发挥WinRunner,实现真正的自动化测试
- 如何让你的作业在Hadoop集群中真正实现分布式运行?
- 在品经理如何识破消费者的“谎言”,实现真正的客户洞察?
- 如何在手机浏览器上实现真正的0.5像素的线
- 游戏环境下如何实现真正D3D的窗口
- 【转载】Retina屏的移动设备如何实现真正1px的线?
- 游戏环境下如何实现真正D3D的窗口
- 如何实现真正的动态包含
- JS如何实现真正的对象常量
- 如何实现真正的随机数
- 如何实现flash在网页中的真正全屏
- 如何才能更好发挥WinRunner,实现真正的自动化测试
- 白盒测试中如何实现真正意义上并发测试(Java)
- 浅谈JS如何实现真正的对象常量
- 如何设计实现真正的响应式微服务系统?