使用using释放资源

using关键字

using 关键字可以用来导命名空间,与java中的import类似.

我使用using的地方

       using(SqlConnection con=new SplConnection(connString))
         {
          using(SqlCommand cmd=new SqlCommand(cmdTxt,con))  

using的原理

为什么出了using所在的{},会自动回收对象。

原因是当我们将要出{},系统自动调用了Dispose()方法。

而在DISpose方法中是这么实现的

using语句的作用

1.作为关键字,using可以导入命名空间.

2.作为C#语句,using可以释放对象占用的内存资源.

using语句的本质

既然using可以释放对象,那么是不是在所有的对象前都可以用using来限制?  <不是>

原因如下:

1.using可以主动释放的对象都需要实现IDisable借口.

2.即使都实现了IDisable接口,也没有必要全部使用using.我们只对那些对系统性能有重要影响的对象进行using限定,而其他的对象可以交给垃圾回收器处理.

哪些对象才可以使用Using回收!

必须实现了IDisposable 接口的类型才可以使用using回收!

using回收的是托管还是非托管资源?

解析:什么是托管:所有的C#代码都是被CLR监管,

结论是using回收的是 非托管资源!

Using释放的是托管资源还是非托管资源?

解析:非托管,C#应用托管到.NET Framework.但是他可以释放非托管资源。

Dispose方法会自动调用Close()

要想让一个类型可以通过using管理,该类型或者父类必须实现了IDisposable接口。

using(SqlConnection con=new SqlConnection)

{

//本质上自动调用了Dispose方法

}

close()和dispose()区别?

解析:close()只是关闭连接,但是通道没有销毁,dispose()不仅把连接给关闭了,而且把通道也给销毁了。

时间: 2024-10-20 21:40:23

使用using释放资源的相关文章

VC++玩转Native Wifi API 3---GOTO在释放资源时的作用

GOTO语句有着很臭的名声,我们的老师经常教导我们说,不要轻易使用它. C++跳转语句有三个:goto.break和continue.它们只是工具,我觉得问题不能归咎于工具,问题在于人. 就像指针一样,goto这个无条件跳转语句力量还是很强大的,如果滥用,出现问题很难排查. 但有些时候goto确实是不二选择,例如我遇到的,在函数中有多个出口,而每个出口都遇到释放资源的时候,与其都把释放语句不厌其烦的写一遍, 不如一个goto语句来的干脆利落. 下面的例子取自上一篇Native Wifi API文

java7(3)——增强的catch之自动释放资源

跟mutilcatch一样,java7提供了自动释放资源的方法,但还是很少看到人使用,估计是麻烦去重写close方法.不过jdk内部一些类已经改成使用增强的catch来释放资源的写法,所以我们有必要了解一下这个功能. 顾名思义,自动释放资源就是我们不用再在fianlly里面去close掉资源了,close这个步骤有程序底层自动完成. 举个栗子: [要自动释放资源的类]: 1 public class CustomResource implements AutoCloseable { 2 3 @O

C#创建excel并释放资源

using System; using Microsoft.Office.Interop.Excel; using Excel = Microsoft.Office.Interop.Excel; using System.IO; using System.Windows.Forms; using System.Runtime.InteropServices; public class Class2 { private string filePath; private Excel.Applicat

写出高性价比代码之C#建议第52-及时释放资源

垃圾回收机制自动为我们隐式地回收了资源(垃圾回收器会自动调用终结器),那我们为什么要主动释放资源呢? private void buttonOpen_Click(object sender,EventArgs e) { FileStream fileStream = new FileStream(@"c:\test.txt",FileMode.Open); } private void buttonGC_Click(object sender,EventArgs e) { System

编写高质量代码改善C#程序的157个建议——建议52:及时释放资源

建议52:及时释放资源 垃圾回收机制自动为我们隐式地回收了资源(垃圾回收器会自动调用终结器),那我们为什么要主动释放资源呢? private void buttonOpen_Click(object sender,EventArgs e) { FileStream fileStream = new FileStream(@"c:\test.txt",FileMode.Open); } private void buttonGC_Click(object sender,EventArgs

C#继承IDisposable释放资源

public class CDisposable : IDisposable { //析构函数,编译后变成 protected void Finalize(),GC会在回收对象前会调用调用该方法 ~CDisposable() { Dispose(false); } //通过实现该接口,客户可以显式地释放对象,而不需要等待GC来释放资源,据说那样会降低效率 void IDisposable.Dispose() { Dispose(true); } //将释放非托管资源设计成一个虚函数,提供在继承类

using释放资源

using关键字的使用 释放资源: 用了using,还是需要try--catch的 using的原理: 为什么出了using所在的{},会自动回收对象. 原因是当我们将要出{},系统自动调用了Dispose()方法. 而在DISpose方法中是这么实现的 哪些对象才可以使用Using回收! 必须实现了IDisposable 接口的类型才可以使用using回收! using回收的是托管还是非托管资源? 解析:什么是托管:所有的C#代码都是被CLR监管, 结论是using回收的是 非托管资源! us

COCOS2D 释放资源的最佳时机

有场景A跟场景B,场景A是当前场景,场景B是将要替换的新场景. 那么A场景的资源释放最佳时机是在什么时候呢? 这是释放资源的代码(注意要按这个顺序释放): 1 2 3 4 CCAnimationCache::purgeSharedAnimationCache(); SpriteFrameCache::getInstance()->removeUnusedSpriteFrame(); CCTextureCache::getInstance()->removeUnusedTextures(); C

编写高质量代码改善C#程序的157个建议——建议46:显式释放资源需继承接口IDisposable

建议46:显式释放资源需继承接口IDisposable C#中的每一个类型都代表一种资源,资源分为两类: 托管资源:由CLR管理分配和释放的资源,即从CLR里new出来的对象. 非托管资源:不受CLR管理的对象,如Windows内核对象,或者文件.数据库连接.套接字.COOM对象等. 如果我们的类型使用了非托管资源,或者需要显示地释放托管资源,那么就需要让类型继承接口IDisposable,这毫无例外.这相当于告诉调用者,类型资源是需要显示释放资源的,你需要调用类型的Dispose方法. 一个标

JDK1.7中新增自动释放资源接口AutoCloseable

新增了try-with-resource 异常声明 在JDK7中只要实现了AutoCloseable或Closeable接口的类或接口,都可以使用try-with-resource来实现异常处理和资源关闭 异常抛出顺序.在Java se 7中的try-with-resource机制中异常的抛出顺序与Java se 7以前的版本有一点不一样. 是先声明的资源后关闭 JDK7以前如果rd.readLine()与rd.close()(在finally块中)都抛出异常则只会抛出finally块中的异常,