区别:

IDispose接口可以通过Using关键字实现使用后立刻销毁,因此,Dispose适合只在方法中调用一次SqlConnection对象,而Close更适合SqlConnection在关闭后可能需要再次打开的情况。

Close ()方法回滚任何挂起的事务。然后,它将连接释放到连接池,或者在连接池被禁用的情况下关闭连接,应用程序可以多次调用 Close。不会生成任何异常。如果将连接池值 Pooling 设置为 true 或 yes,则也会释放物理连接。

dispose()方法实际是和close()做的同一件事,唯一的区别是Dispose方法清空了connectionString,即设置为了null.

using表示在{}区间后,自动调用Dispose方法,保证对象被销毁。 using只能用在集成了IDispose接口的类上

  引用微软ADO.Team的经理的话说,sqlconnection的close和dispose实际是做的同一件事,唯一的区别是Dispose方法清空了connectionString,即设置为了null.

双击代码全选
1
2
3
4
5
6
SqlConnection con = new SqlConnection("Data Source=localhost;Initial Catalog=northwind;User ID=sa;Password=steveg");
        con.Open();
        con.Close();
        con.Open();
        con.Dispose();
        con.Open();

  上例运行发现,close掉的connection可以重新open,dispose的不行,因为connectionstring清空了,会抛出InvalidOperationException提示The ConnectionString property has not been initialized,但请注意此时sqlconnection对象还在。

  如果dispose后给connectionString重新赋值,则不会报错。

  由此得出的结论是不管是dispose还是close都不会销毁对象,即不会释放内存,它们会把sqlconnection对象丢到连接池中,那此对象什么时候销毁呢?我觉得应该是connection timeout设置的时间内,如果程序中没有向连接池发出请求说要connection对象,sqlconnection对象便会销毁,这也是连接池存在的意义。

  刚开始以为dispose会释放资源清空内存,如果这样的话,连接池不是每次都是要创建新对象,那何来重用connection呢?在网上看到很多人说close比dispose好,我想真正的原因是dispose后的sqlconnection对象要重新初始化连接字符串而已,并不是象某些人说的dispose会释放对象。

  所以在try..catch和using的选择上大胆的使用using吧,真正的效率差异我想可能只有百万分之一秒吧(连接池重用该连接对象初始化连接字符串的时间),而且enterprise library中封装的data access层全是用的using,从代码的美观和效率上综合考虑,using好

  补充:using不会捕捉其代码快中的异常,只会最后执行dispose方法,相当于finally{dispose},本文主要是想说明dispose和close的差异,因为using是绝对dispose的,可是如果人为的写try..finally有的人会选择close有的人会选择dispose,实际上在这2者的选择上是有差异的,dispose方法会执行close方法

sqlconnection dispose()与close()的区别的更多相关文章

  1. C#中Dispose,finalize,GC,析构函数区别

    释放类所使用的未托管资源的两种方式:  1.利用运行库强制执行的析构函数,但析构函数的执行是不确定的,而且,由于垃圾收集器的工作方式,它会给运行库增加不可接受的系统开销. 2.IDisposable接 ...

  2. WinForm中Dispose()和Close()的区别

    WinForm中Dispose()和Close()的区别 Close()会自动调用Dispose()方法,但是如果窗体是模态的,则不会调用 所以ShowDialog的时候,要用Dispose(),Sh ...

  3. ado中dispose和close的区别,摘自网络

    Close() and Dispose() are basically the same thing on an ADO.NET connection object for providers shi ...

  4. 深入解析Close()和Dispose()的区别

    很多人都认为Close()方法内部会调用Dispose()方法,所以并没有本质的区别!实际上这个看法不是很准确,对有 些类来说,的确Close()和Dispose()没有本质区别,但是对有些类来说并非 ...

  5. NET知识大纲

    第一部分 C#编程基础 1.(30)变量.运算符(+.-.*./.++.--.括号.==.!=.>.<.>=.<=.&&.||).流程控制(if.while.f ...

  6. 重学c#系列——异常续[异常注意事项](七)

    前言 对上节异常的补充,也可以说是异常使用的注意事项. 正文 减少try catch的使用 前面提及到,如果一个方法没有实现该方法的效果,那么就应该抛出异常. 如果有约定那么可以按照约定,如果约定有歧 ...

  7. 基础笔记(一):C#编程要点

    前言 来源于手中日常摘录的资料和书籍,算是对看过的东西的总结,部分注有阅读心得,也有部分只提出大纲或结论.(备注:本篇文章中大部分要点需要有实际的开发经验,有助于阅读理解.)     目录 const ...

  8. 【转】PowerShell 连接SQL Server 数据库 - ADO.NET

    转至:http://www.pstips.net/connect-sql-database.html PowerShell 通过ADO.NET连接SQL Server数据库,并执行SQL脚本.工作中整 ...

  9. IDisposeable,Close

    一.资源分类 资源分为托管资源和非托管资源. 非托管资源:所有的windows内核对象(句柄)都是非托管资源,如stream,数据库连接,GDI+和COM对象等,这些资源不受CLR管理. 托管资源:由 ...

随机推荐

  1. SpringDataJPA最佳实践(一)简介

    在团队中使用SpringDataJPA有一段时间了,也踩过一些坑,这里记录一下学习历程. 1.简介 Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架 ...

  2. Yii Model

    REFs 自动生成代码 创建第一个Yii应用 创建模型 Yii 用户登陆机制

  3. C++ wait捕捉的信号处理WIFEXITED/WEXITSTATUS/WIFSIGNALED

    当一个进程正常或异常终止的时候,内核就像其父进程发送SIGCHLD信号,因为子进程是个异步事件,所以这种信号也是内核给那个父进程发的异步通知.父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用 ...

  4. Qt 编译完后指定输出路径

    make install INSTALL_ROOT=/home/hotot/qt4rls

  5. Vue3.0代理的设置

    1.在主目录下创建vue.config.js 内容如下: const path = require('path'); function resolve (dir) { return path.join ...

  6. prisma graphql 集成timescaledb

    prisma 官方文档说明了因为支持pg 所以相关的timescaledb.cockroachdb 应该也是支持的 但是测试之后timescaledb 支持cockroachdb有问题(事务处理模型支 ...

  7. weex入门篇

    weex入门篇 Weex 致力于使开发者能基于当代先进的 Web 开发技术,使用同一套代码来构建 Android.iOS 和 Web 应用. weex SDK 集成了vueJS,Rax,不需要额外引入 ...

  8. 遍历树节点(多层)的方法(java)

    前序遍历,后序遍历,广度遍历,深度遍历,遍历一级节点.以及按钮如何响应点击事件. import java.awt.*; import java.awt.event.*; import java.uti ...

  9. Tensorflow笔记——神经网络图像识别(一)前反向传播,神经网络八股

      第一讲:人工智能概述       第三讲:Tensorflow框架         前向传播: 反向传播: 总的代码: #coding:utf-8 #1.导入模块,生成模拟数据集 import t ...

  10. 学习笔记之C# 教程 | 菜鸟教程

    C# 教程 | 菜鸟教程 http://www.runoob.com/csharp/csharp-tutorial.html 菜鸟教程在线编辑器 http://www.runoob.com/try/r ...