EffectiveC#15--使用using和try/finally来做资源清理
1.任何时候你在使用一个有Dispose()方法的类型时,你就有责任来调用Dispose()方法来释放资源。
最好的方法来保证Dispose()被调用的结构是使用using语句或者try/finally块
public void ExecuteCommand( string connString, string commandString )
{ using ( SqlConnection myConnection = new SqlConnection( connString ))
{ using ( SqlCommand mySqlCommand = new SqlCommand( commandString, myConnection ))
{
myConnection.Open();
mySqlCommand.ExecuteNonQuery();
}
}
}
翻译者认为上述结构问题在于无法捕获异常。建议如下写法,作者本人和译者相同。
public void ExecuteCommand( string connString, string commandString )
{
SqlConnection myConnection = null;
SqlCommand mySqlCommand = null;
try
{
myConnection = new SqlConnection( connString );
mySqlCommand = new SqlCommand( commandString, myConnection ); myConnection.Open();
mySqlCommand.ExecuteNonQuery();
}
catch
{}
finally
{
if ( mySqlCommand != null ) //注意这里判断对象是否为null是很重要的一些封装了COM的对象,有些时候的释放是隐式的,当你再释放一些空对象时会出现异常
mySqlCommand.Dispose();
if ( myConnection != null )
myConnection.Dispose(); }
}
sqlconnection它还有close(),Dispose方法会释放更多的资源,它还会告诉GC,这个对象已经不再须要析构了
2.使用或包含非托管资源的类型必须实现IDisposable接口的Dispose()方法来精确的释放系统资源。
EffectiveC#15--使用using和try/finally来做资源清理的更多相关文章
- ChemDraw 15.1 Pro插入阿尔法可以这样做
在理工科学科学习过程中,大家都会遇到各种希腊字母,而阿尔法(α)又是最常见的一个.最新版本ChemDraw 15.1 Pro的功能更加卓越,在很多功能上都进行了优化,操作更简便.其中,就可以很好的在公 ...
- 【python cookbook】【字符串与文本】15.给字符串中的变量名做插值处理
问题:想创建一个字符串,其中嵌入的变量名称会以变量的字符串值形式替换掉 解决方法:str.format().str.format_map() >>> s = '{name} has ...
- Effective C++(15) 在资源管理类中提供对原始资源的访问
问题聚焦: 资源管理类是为了对抗资源泄露. 如果一些函数需要访问原始资源,资源管理类应该怎么做呢? 关于资源管理的概念总是显得那么的高大上,其实只是抽象一点. 下面用 ...
- 15.SpringBoot简介-SpringBoot是什么可以做什么
转自:https://blog.csdn.net/kingboyworld/article/details/77713743 在过去的两年时间里,最让人兴奋.回头率最高.最能改变游戏规则的东西,大概就 ...
- Linux学习笔记-第15天 还真是看书不如做实验
自己多操作几遍还是有好处的,看跟练还是不一样.突然有点庆幸自己考试时间被改了.月底考试的话估计会有点悬.加油吧
- fasthttp 的 goroutine pool 实现探究
引言 fasthttp是一个非常优秀的web server框架,号称比官方的net/http快10倍以上.fasthttp用了很多黑魔法.俗话说,源码面前,了无秘密,我们今天通过源码来看一看她的gor ...
- 读书笔记--《Effective C#》总结
值得推荐的一本书,适合初中级C#开发人员 第1章 C#语言元素 原则1:尽可能的使用属性(property),而不是数据成员(field) ● 属性(property)一直是C#语言中比较有特点的存在 ...
- Go开发之路 -- 函数详解
声明语法 func 函数名 (参数列表) [(返回值列表)] {} Golang函数特点 a. 不支持重载,一个包不能有两个名字一样的函数 b. 函数是一等公民,函数也是一种类型,一个函数可以赋值给变 ...
- Go语言系列(三)- 基础函数和流程控制
一.strings和strconv的使用 1. strings.HasPrefix(s string, prefix string) bool:判断字符串s是否以prefix开头 . 2. strin ...
随机推荐
- CSS transform(变形)和transform-origin(变形原点)
transform(变形)和transform-origin(变形原点)的说明: 目前这两个属性得到了除去ie以外各个主流浏览器webkit,firefox,opera的支持,属性名分别为 -webk ...
- Sublime Text3 Package Control和Emmet插件安装方法
因为初学前端,所以今天安装了Sumblime Text 3,然后就停不下来去找Package Control的安装方法. 网络上我找到并尝试过的方法有两种,我使用的是用Python代码去安装并成安装成 ...
- 使用date转换UNIX时间戳
1.将time string转换成时间戳 date -d "2010-10-12 12:25:00" +%s 2.将时间戳转换成time string date -d " ...
- Web Api Session开启会话支持
1.WebApi中默认是没有开启Session会话支持的.需要在Global中重写Init方法来指定会话需要支持的类型 //代码如下 public override voi ...
- post请求和get请求的区别
1:如果表单是以post方式发送,那么表单中的数据会放在请求报文体中,发送到服务端.但是如果是以get方式提交表单,那么表单中用户输入的数据都是以URL地址的方式发送到服务端. 2:在服务端接收数据时 ...
- Code First 数据注释--DatabaseGenerated
EF中可以使用DatabaseGenerated设置数据库字段的属性,它有三个枚举值:Computed.None.Identity Computed 表示这一列是计算所得 None 不做处理 Iden ...
- Ztree中simpleData是怎么转换成标准ztree数组对象的
今天遇到一个自己构造树的情况,树是动态的,预先不知道根节点,用的是easyUI中的tree,于是参考了下Ztree中的实现,恍然大悟,遂记之: transformTozTreeFormat: func ...
- untiy绘制网格mesh
关于绘制网格, 雨松前辈 已经解释的非常的到位,这里我只是搬运工,实在是感觉自己去描述的话不会有雨松大神描述的清楚,该文章循序渐进,一步步引导读者去理解unirty 绘图机制,真的是没有比这个再好得了 ...
- Effective C++ 第二版 5)new和delete形式 6) 析构函数里的delete
内存管理 1)正确得到: 正确调用内存分配和释放程序; 2)有效使用: 写特定版本的内存分配和释放程序; C中用mallco分配的内存没有用free返回, 就会产生内存泄漏, C++中则是new和de ...
- Gora官方文档之二:Gora对Map-Reduce的支持
参考官方文档:http://gora.apache.org/current/tutorial.html 项目代码见:https://code.csdn.net/jediael_lu/mygoradem ...