C# using的一些事
一.using释放资源
using不可以释放所有的对象,原因如下:
1.using可以主动释放的对象都需要实现IDisable接口。
2.即使都实现了IDisable接口,也没有必要全部使用using,我们只对那些对系统性能有重要
影响的对象进行了using限定,而其他的对象可以交给垃圾回收器处理。
using释放资源的过程:
首先回顾数据库连接和关闭代码的写法,说明数据库连接是一种宝贵的资源,用完了必须马上释放,使用try-catch-finally就可以保证数据库连接的正确释放。指出try-catch-finally代码结构繁琐,有一种替代的方式就是使用using,展示using释放数据库资源的例子,并说明以下几点:
(1)using的语法结构
(2)使用using和try--catch--finally释放数据库连接是完全等效的。
但是代码要精简,不需要显示调用Close()方法。
最后进一步深入介绍using,如下:
(1)using用来释放一个对象占用的重要资源,不仅仅包括数据库对象,还有文件读写对象等;
(2)使用using语法的对象都需要实现IDisable接口的Dispose()方法。
该方法专门用来释放对象占用的重要资源。
Using语句编译后自动生成对Dispose()方法调用的代码。
(3)Close()方法封装了对Dispose()方法的调用。
Using的两个作用: 其1:导入命名空间
其2:释放对象占用的资源,如Connection,DataReader,FileStream
Using引起来的对象的作用域只在花括号,出了{}就不再起作用了。
注:
using可以让程序员不手动关闭连接对象
using释放的是托管资源还是非托管资源?
解析:
非托管,C#应用托管到.NET Framework.但是他可以释放非托管资源。
1. Dispose() 是 IDisable 接口的方法
2 .Dispose() 专用于释放对象稀缺资源
3 .Object 类实现了Dispose(),部分类实现了Close()
4 .Close()封装了对Dispose()的调用
二 using语句原理
using可以释放对象,但并非所有的对象前都可以使用using来限制
原因:
using可以主动释放的对象都需要实现IDisable接口。
为什么出了using所在的{},会自动回收对象。
原因是当我们将要出{},系统自动调用了Dispose()方法。
而在DISpose方法中是这么实现的

注:Dispose方法会自动调用Close()
要想让一个类型可以通过using管理,该类型或者父类必须实现了IDisposable接口。
using(SqlConnection con=new SqlConnection)
{
//本质上自动调用了Dispose方法
}
close()和dispose()区别?
解析:
close()只是关闭连接,但是通道没有销毁,dispose()不仅把连接给关闭了,而且把通道也给销毁了。
C# using的一些事的更多相关文章
- 【腾讯Bugly干货分享】H5 视频直播那些事
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57a42ee6503dfcb22007ede8 Dev Club 是一个交流移动 ...
- CSharpGL(31)[译]OpenGL渲染管道那些事
CSharpGL(31)[译]OpenGL渲染管道那些事 +BIT祝威+悄悄在此留下版了个权的信息说: 开始 自认为对OpenGL的掌握到了一个小瓶颈,现在回头细细地捋一遍OpenGL渲染管道应当是一 ...
- TODO:字节的那点事Go篇
TODO:字节的那点事Go篇 (本文go version go1.7.3 darwin/amd64) 在Golang中string底层是由byte数组组成的. fmt.Println(len(&quo ...
- Microsoft Visual Studio 2013 — Project搭载IIS配置的那些事
前段时间在改Bug打开一个project时,发生了一件奇怪的事,好好的一直不能加载solution底下的这个project,错误如下图所示:大致的意思就是这个project的web server被配置 ...
- OpenNLP:驾驭文本,分词那些事
OpenNLP:驾驭文本,分词那些事 作者 白宁超 2016年3月27日19:55:03 摘要:字符串.字符数组以及其他文本表示的处理库构成大部分文本处理程序的基础.大部分语言都包括基本的处理库,这也 ...
- HTTPS那些事(一)HTTPS原理
转载来自:http://www.guokr.com/post/114121/ 谣言粉碎机前些日子发布的<用公共WiFi上网会危害银行账户安全吗?>,文中介绍了在使用HTTPS进行网络加密传 ...
- 做一个 App 前需要考虑的几件事
做一个 App 前需要考虑的几件事 来源:limboy的博客 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 ...
- Ctrl-A全选这点事(C#,WinForm)
所有的文本框,不管单行多行都Ctrl-A全选就好了吧?是啊,很方便.Windows的软件基本都是这样.可为什么我们自己制作的WinForm就默认不是这样呢?谁知道呢,可能是WinForm饱受诟病,要改 ...
- 使用Bandwagon的VPS第一件事《FQ》
说点闲话:昨天的长靴子到了,哎呀,今天那个高兴,踩着我的8厘米的过膝靴就出门上专业外语去了,扎了个麻花辫子,那个心情好哟,搞得我都不想继续学习linux平台上的C语言了,好想逛街----秀秀我的鞋子, ...
- 【转载】在IT界取得成功应该知道的10件事
在IT界取得成功应该知道的10件事 2011-08-11 13:31:30 分类: 项目管理 导读:前面大多数文章都是Jack Wallen写的,这是他的新作,看来要成为NB程序员还要不停的自我总结 ...
随机推荐
- h264 profile & level
转自:http://blog.csdn.net/sphone89/article/details/17492433 H.264 Profiles H.264有四种profile,每个profile支持 ...
- SSH Key连接github提示Permission denied (publickey).错误
root@debian64:/home/xiaoliuzi/.ssh/key_backup# ssh -T git@github.com The authenticity of host 'githu ...
- 廖雪峰js教程笔记9 json
JSON是JavaScript Object Notation的缩写,它是一种数据交换格式. 在JSON出现之前,大家一直用XML来传递数据.因为XML是一种纯文本格式,所以它适合在网络上交换数据.X ...
- 2016.9.1 JavaScript入门之五
1.数据类型:对象:也可以被认为是一个键/值存储,像一个字典.可以取代switch{case:case:}或者if else 例如: function phoneticLookup(val) { va ...
- [转] FastMM使用详解
FastMM使用详解 一.引言 FastMM 是适用于delphi的第三方内存管理器,在国外已经是大名鼎鼎,在国内也有许多人在使用或者希望使用,就连 Borland 也在delphi2007 ...
- IComparer 指定排序。
public class NeEntityComparer : IComparer<NeEntity> { public int Compare(NeEntity x, NeEntity ...
- sed 字符串替换
1. sed替换的基本语法为: sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义. 2. 单引号” ‘ ’”是没有办法用反 ...
- Spring Data JPA 查询方法支持的关键字
Table 2.3. Supported keywords inside method names Keyword Sample JPQL snippet And findByLastnameAndF ...
- 每天一个linux命令---kill
linux中终止进程的命令--kill 一般用的是: 搜索pid: ps -ef|grep calendar 杀死pid:kill -9 pid 格式是:kill[参数][进程号]
- Zookeeper 3.4.6 Client端流程粗略梳理
首先从Zookeeper入手,Zookeeper-->ClientCnxn-->sendThread/eventThread public ZooKeeper(String connect ...