C#的Dispose模式复习
http://www.cnblogs.com/DebugLZQ/archive/2012/08/28/2659189.html
http://www.cnblogs.com/tsoukw/archive/2006/12/08/586525.html
http://www.cnblogs.com/kevinwan/archive/2007/01/16/621869.html
http://www.cnblogs.com/luminji/archive/2011/01/05/1926468.html
http://www.cnblogs.com/luminji/archive/2011/03/29/1997812.html
http://www.cnblogs.com/susufufu/p/6878974.html
http://www.cnblogs.com/DebugLZQ/archive/2012/08/28/2659189.html
using System;
using System.Collections.Generic;
using System.Text; namespace PerfectFinalizeDispose
{
public class FinalizeDisposeBase : IDisposable
{
// 标记对象是否已被释放
private bool _disposed = false;
// Finalize方法:
~FinalizeDisposeBase()
{
Dispose(false);
}
// 这里实现了IDispose中的 Dispose方法
public void Dispose()
{
Dispose(true);
//告诉GC此对象的Finalize方法不再需要调用
GC.SuppressFinalize(this);
}
//在这里做实际的析构工作
//申明为虚方法以供子类在有必要时重写
protected virtual void Dispose(bool isDisposing)
{
// 当对象已经被析构时,不再执行
if (_disposed)
return;
if (isDisposing)
{
//在这里释放托管资源
//只在用户调用Dispose方法时执行
}
//在这里释放非托管资源 //标记对象已被释放
_disposed = true;
}
} public sealed class FinalizeDispose : FinalizeDisposeBase
{
private bool _mydisposed = false;
protected override void Dispose(bool isDisposing)
{
// Don't dispose more than once.
if (_mydisposed)
return;
if (isDisposing)
{
//在这里释放托管的并且在这个类型中申明的资源
}
//在这里释放非托管的并且在这个类型中申明的资源 //调用父类的Dispose方法来释放父类中的资源
base.Dispose(isDisposing); // 设置子类的标记
_mydisposed = true;
}
}
}
C#的Dispose模式复习的更多相关文章
- [学习笔记] Dispose模式
Dispose模式是.NET中很基础也很重要的一个模式,今天重新复习一下相关的东西并记录下来. 什么是Dispose模式? 什么时候我们该为一个类型实现Dispose模式 使用Dispose模式时应该 ...
- Dispose模式
Dispose模式 Dispose模式是.NET中很基础也很重要的一个模式,今天重新复习一下相关的东西并记录下来. 什么是Dispose模式? 什么时候我们该为一个类型实现Dispose模式 使用Di ...
- 【C# .Net GC】清除非托管类型(Finalize终结器、dispose模式以及safeHandler)
总结 1.一般要获取一个内核对象的引用,最好用SafeHandle来引用它,这个类可以帮你管理引用计数,而且用它引用内核对象,代码更健壮 2.托管中生成并引用非托管,一但非托管和托管中的引用断开(托管 ...
- C#中标准Dispose模式的实现与使用(条目17 实现标准的销毁模式)
实现了Dispose模式与实现了IDisposable接口的区别就是:IDisposable的实现的可靠性(释放相关资源)要靠编程人员来解决(你确信你从来都一直调用了Dispose(Close)方法吗 ...
- 第七节:使用实现了dispose模式的类型
知道类型如何实现dispose模式之后,接下来看一下开发人员怎样使用提供了dispose模式的类型.这里不再讨论前面的SafeHandle类,而是讨论更常用的FileStream类. 可以利用File ...
- C#中标准Dispose模式的实现
http://www.cnblogs.com/luminji/archive/2011/03/29/1997812.html 需要明确一下C#程序(或者说.NET)中的资源.简单的说来,C#中的每一个 ...
- C#的内存管理原理解析+标准Dispose模式的实现
本文内容是本人参考多本经典C#书籍和一些前辈的博文做的总结 尽管.NET运行库负责处理大部分内存管理工作,但C#程序员仍然必须理解内存管理的工作原理,了解如何高效地处理非托管的资源,才能在非常注重性能 ...
- C# Dispose模式详细分析
C#Dispose模式 目的: 为了及时释放宝贵的非托管资源和托管资源,并且保证资源在被gc回收的时候可以正确释放资源,同时兼顾执行效率 必须遵循的事实: 1 托管资源释放: 由另一线程的gc进行释放 ...
- [No000017B]改善C#程序的建议4:C#中标准Dispose模式的实现
需要明确一下C#程序(或者说.NET)中的资源.简单的说来,C#中的每一个类型都代表一种资源,而资源又分为两类: 托管资源:由CLR管理分配和释放的资源,即由CLR里new出来的对象: 非托管资源:不 ...
随机推荐
- oracle 查看主外键约束
select a.constraint_name, a.table_name, b.constraint_name from user_constraints a, user_constraints ...
- D3——Updates, Transitions, and Motion
<script type="text/javascript"> ; ; ; , , , , , , , , , ,, , , , , , , , , ]; //crea ...
- JavaScript浏览器对象模型(BOM)之history对象
history 对象是 window 对象的属性,它保存着用户上网的记录,从窗口被打开的那一刻算起. 一.history对象的属性 可以通过判断 history.length,得到是否有历史记录和记录 ...
- SGU---462 Electrician 最大生成树
题目链接: https://cn.vjudge.net/problem/SGU-462 题目大意: 有N条电线需要接入电网,第i条电线计划连接ai和bi两个地点,电线有两个属性:ri(电线稳定度)和c ...
- ApplicationEventPublisher笔记
ApplicationEventPublisher是ApplicationContext的父接口之一.这接口的作用是:Interface that encapsulates event publica ...
- Guava包学习---Sets
Sets包的内容和上一篇中的Lists没有什么大的区别,里面有些细节可以看一下: 开始的创建newHashSet()的各个重载方法.newConcurrentHashSet()的重载方法.newTre ...
- 【[CQOI2009]跳舞】
首先这种匹配类问题一看就是网络流了 之后想一想怎么搞 发现题目的意思是使得跳舞最少的男生跳的舞最多 很自然想到二分答案啊 现在转化成了一个判定性问题,能否使得所有人都跳上\(k\)只舞 由于喜欢和不喜 ...
- [转载] Python协程从零开始到放弃
Python协程从零开始到放弃 Web安全 作者:美丽联合安全MLSRC 2017-10-09 3,973 Author: lightless@Meili-inc Date: 2017100 ...
- [转]使用QT开发GoogleMap瓦片显示和下载工具
第一节 之前做项目的时候经常遇到需要大量地图背景数据,然后没有数据被逼着去Google上下载瓦片数据在拼接成整张影像的工作,其实遥感影像晚上有很多可以下载到的,但是大部分是作为研究用的,作为GIS的背 ...
- JS获值
var json = []; $('#hdtj table').each(function(index){ json.push({ 'con_main':$(this).find('input[nam ...