Dzwebs.Net

撰写电脑技术杂文十余年

Close()方法 Dispose()方法 区别

Admin | 2014-7-25 11:34:00 | 被阅次数 | 4833

温馨提示!

如果未能解决您的问题,请点击搜索;登陆可复制文章,点击登陆

  有时候当我们在调用数据库的时候,使用SqlReader对象的时候,会遇到连接池达最大值或超时的情况,导致无法检索到需要的数据,有的地方说要使用Close()方法,而有的地方说还要使用Dispose()方法,那么,到底这两者有什么区别呢?

  区别一:

  Close()方法只是关闭了连接,然后这个连接被存储到连接池,所以在调用Close()方法以后,还是可以再通过Open()方法来打开连接的

  而调用Dispose()方法以后,这个连接就不能在使用了!

  区别二:

  还有一个重要区别就是,当Close()方法并没有调用GC.SuppressFinalize(this);,这导致的直接后果就是在垃圾回收的时候需要进行终止化操作,这会导致这个实例的“代龄”提升,从而极大的延迟这个对象的回收时间!

  针对SqlConnection这个类来说,如果以后还需要使用这个连接可以使用Close()方法临时关闭连接,如果以后不需要使用这个连接了,可以优先选用Dispose()方法来释放资源,当然你可以使用using关键字来简化这个过程,OleDbConnection类和OdbcConnection类的源代码我没有找到,但是应该和SqlConnection类是类似的!

  下面我们看一个常用的类,看看FileStream类的Close()方法和Dispose()方法有什么区别:

  FileStream类的Close()方法是继承于Stream类的,源代码是这样的:

  public virtual void Close()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

  FileStream类的Dispose()方法是继承于Stream类的,源代码是这样的:
        public void Dispose()
        {
            Close();
        }

  是一个标准的Dispose模式的实现,Close()方法调用的是带参数的Dispose方法,然后调用GC.SuppressFinalize (this);请求系统不要调用指定对象的终结器。而Dispose()方法直接调用Close()方法!

  所以,对于FileStream类来说,Close()方法和Dispose()方法是没有区别!但是调用调用数据库,就存在上面的两种区别了。


该杂文来自: 网站开发杂文

上一篇:设置TextBox文本框为密码格式

下一篇:利用GridView的RowDataBound事件显示ToolTip

网站备案号:

网站备案号:滇ICP备11001339号-7

版权属性:

Copyright 2007-2021-forever Inc. all Rights Reserved.

联系方式:

Email:dzwebs@126.com QQ:83539231 访问统计