MSDN中的解释

SqlConnection.Close方法

关闭与数据库之间的连接。
Close 方法回滚任何挂起的事务。 然后,它将连接释放到连接池,或者在连接池被禁用的情况下关闭连接。
如果 SqlConnection 超出范围,则不会将其关闭。 因此,必须通过调用Close或Dispose显式关闭该连接。 Close 和 Dispose 的功能等效。 如果连接池值 Pooling 设置为 true 或 yes,则基础连接将返回到连接池。 另一方面,如果 Pooling 设置为 false 或 no,则会关闭到服务器的基础连接。

Component.Dispose方法

释放有Component使用的所有资源
使用完 Component 后调用 Dispose。 Dispose 方法使 Component 处于不可用状态。调用完 Dispose 后,必须释放对 Component 的所有引用,这样垃圾回收器才能收回 Component 占用的内存。

Garbage Collection

垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。

实践代码

            string connStr = @"server=.;database=MyFirstDB;uid=sa;pwd=157326;";Stopwatch sp = new Stopwatch();sp.Start();for (int i = 0; i < 1000000; i++){SqlConnection conn = new SqlConnection(connStr);conn.Open();//conn.Close();//00:00:08.3134626//conn.Dispose();//00:00:08.7635818}sp.Stop();Console.WriteLine(sp.Elapsed);Console.ReadKey();

第一次使用close,第二次使用dispose。两者执行时间基本相同。

推论

msdn只说dispose会撤销所有对SqlConnection对象的所有引用,并没有说dispose要销毁SqlConnection对象。即只是告诉GC可以销毁他了。
至于什么时候销毁SqlConnection对象,那是GC的事儿了。并且msdn说垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。是最佳时间并不是立即销毁。
close只是关闭了与数据库之间的连接,并没有撤销对SqlConnection对象的引用,所以close后还可以open。而dispose就不可以。
由此得出的结论是不管是dispose还是close都不会销毁对象,即不会释放内存,它们都会把sqlconnection对象丢到连接池中,那此对象什么时候销毁呢?我觉得应该是connection timeout设置的时间内,如果程序中没有向连接池发出请求说要connection对象,sqlconnection对象便会销毁,这也是连接池存在的意义。
在查阅资料和多方认证探讨后,基本是这么个结论,如有不同见解,还请多多指教。
PS:stream中的dispose和close是相同的。
参考资料:dispose()与close()的区别 - 凡心不凡 - 博客园

close和dispose的区别相关推荐

  1. Close与Dispose的区别

    Close与Dispose的区别:http://topic.csdn.net/t/20051007/15/4310467.html Close 是停业整顿,停业了,可以通过公关,再重开,物还是原来的物 ...

  2. c#中窗体的close、dispose的区别及分析

    一个小程序,初始运行正常,当实际使用时,突然发现程序运行一段时间后,会自动的弹出一个系统中的messagebox.我想当然的认为是病毒在作怪吗?把程序安装到其他电脑上,故障依然,可以肯定是代码的事了. ...

  3. using(){},Close(),Dispose()的区别

    //用Close(),Dispose()方式关闭连接 string connString = "Data Source=(local);Initial Catalog=Linq;Integr ...

  4. WinForm:模态窗口与非模态窗口、Close与Dispose

    1.模态窗口与非模态窗口的区别: ①调用ShowDialog显示的为模态窗口,Show显示的为非模态窗口. ②模态窗口会堵塞主窗口,在模态窗口关闭前不能对主窗口进行操作.非模态窗口显示时依然可以操作主 ...

  5. .NET笔试题集(一)

    题目来源于传智播客和各大互联网,复习.重新整理贴出来. 1.简述 private. protected. public. internal.protected internal 访问修饰符和访问权限 ...

  6. 程序员级别鉴定书(.NET面试问答集锦)

    作为一个.NET程序员,应该知道的不仅仅是拖拽一个控件到设计时窗口中.就像一个×××手,一定要了解他的爱车 – 能做什么不能做什么. 本文参考Scott Hanselman给出的.NET问题列表,整理 ...

  7. .Net高级技术——IDisposable

    IDisposable概述 GC(垃圾收集器)只能回收托管(Managed)内存资源,对于数据库连接.文件句柄.Socket连接等这些资源(非托管资源,UnManaged)就无能为例,必须程序员自己控 ...

  8. .Net程序员面试 中级篇 (回答Scott Hanselman的问题)

    继<.Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题)>跟<.Net程序员面试 每个人都应知道篇 (回答Scott Hanselman的问题)>之 ...

  9. 【ADO.NET基础知识】SqlConnection、command、DataSet 、DataTable、dataAdapter

    1.使用Connection连接数据库的步骤: (1).添加命名空间 System.Data.SqlClient(注意:初学者经常会忘记) (2)定义连接字符串.连接SQL Server 数据库时: ...

最新文章

  1. 基于SSM实现的图书馆管理系统
  2. 深度学习核心技术精讲100篇(五十一)-Spark平台下基于LDA的k-means算法实现
  3. SAP删除会计科目 OBR2
  4. Redux中的重要概念
  5. 一张图解决Android Studio 项目运行按钮灰色
  6. 对一组同构对象用单数组表示法实现(算法导论第十章10.3-2)
  7. linux upgrade tool使用_p4merge的使用
  8. 一文搞懂RSOP偏振态旋转
  9. c#值get、 set用法(包含自动转换的说明)
  10. 古代婚姻和现代社会矛盾了。导致大量大龄女性未婚
  11. Programming Protocol-independent Packet Processors (P4)
  12. L2-028 秀恩爱分得快
  13. think in uml 2.1
  14. ubuntu下安装及设置FTP服务器!!
  15. python学习笔记之读取pdf文件库pdfplumber(一)
  16. python 读取pdf图片_Python如何读取pdf中的图片
  17. 树莓派ubuntu mate 修改屏幕解析度为800x480
  18. windows 服务器cpu使占用高的原因分析与解决办法
  19. 逆向分析工具IDA与开源工具Ghidra、Cutter对比测评
  20. 通达信公式:如何表示5个数据中的前三大数值?

热门文章

  1. python-读取指定文件夹下邮件的正文(html格式)
  2. 【第4章 】以太网技术
  3. 什么是ACPI,什么是APIC
  4. JavaScriptj基础
  5. 什么是深拷贝?什么是浅拷贝?
  6. 计算机名、主机名、用户账户名与NetBIOS名有什么区别
  7. 测试——解决MonkeyRunner无法运行的问题
  8. 【论文翻译】Highlight Every Step: Knowledge Distillation via Collaborative Teaching
  9. 太保粉红守护乳腺癌复发险怎么样?好不好?
  10. 使用C# 编辑Word文档 绘制标签