using释放资源

using关键字的使用

释放资源:

  用了using,还是需要try--catch的

  using的原理:

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

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

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

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

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

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

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

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

using语句能确保某个类的Dispose方法在最早的时间调用(using语句执行完之后)

如例:

using (string ss="diso")

{

//执行方法

}

到这里string的Dispose方法就会被调用,不管以何种方式退出代码块,都会调用Dispose方法。

避免意外的异常导致Dispose方法没有被调用

使用using语句之后,无论如何都会被调用执行

时间: 2024-10-12 15:53:13

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); } //将释放非托管资源设计成一个虚函数,提供在继承类

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块中的异常,