黑马程序员技术交流社区

标题: using 与close(),dispose()d的区别 [打印本页]

作者: 严鹏    时间: 2012-2-13 20:03
标题: using 与close(),dispose()d的区别
在ADO.Net中,using与close(),dispose()分别是怎样实现释放内存的,他们的使用与达到的效果有什么不同?
作者: 黄晓波    时间: 2012-2-13 20:35
close(),dispose()的区别:close()之后,在需要的时候还可以再open(),而dispose()之后就释放了内存中的数据,在需要的时候只能重新连接了再用。
作者: 严海彬    时间: 2012-2-17 10:43
using 会自动帮我们dispose ,dispose内部会判断相关链接是否关闭,如套接字,数据流,数据连接等,
close 只是把各种连接关闭,对象本生还存在,
dispose 是直接把对象销毁了
一个比喻就像从水龙头用水管来浇水,close只是吧水龙头关了,dispose是把水管都拔了
作者: 曹停    时间: 2012-2-17 18:10
建议下一本  你必须知道的.NET PDF看看!上面写的都是关于底层的东西!讲的非常好!全面讲解关系内存这块的问题!
多看几遍~很有帮助的!
作者: 王彬    时间: 2012-2-17 19:53
一个比喻就像从水龙头用水管来浇水,close只是吧水龙头关了,dispose是把水管都拔了
作者: 邓坤    时间: 2012-2-21 12:32
using在花括号结束时内部会自动帮我们dispose掉连接;close只是把打开的连接给关闭,还可以再次代开(即open),而dispose则直接把对象给销毁掉了,不能在直接open了,若要open还得重新创建连接
作者: 邱国    时间: 2012-5-3 11:11
严海彬 发表于 2012-2-17 10:43
using 会自动帮我们dispose ,dispose内部会判断相关链接是否关闭,如套接字,数据流,数据连接等,
close  ...

即使 是dispose 了,sqlconnection的对象还是不会被销毁的,只是清空了连接字符串,所以再次open就不行了,如果再重新给连接字符串赋值了,还是可以open的,但是sqlconnection对象还是存在的,

这是我看到网上的一些解释,
作者: 错,谁的错丶    时间: 2012-5-7 20:37
close:关闭之后还能打开。
dispose:直接销毁,不能再次使用,
using 再出了作用域以后调用dispose。
e-g:
string str = "server...........";
SqlConnection conn = new  SqlConnection(str);
{
    conn.Open();
      ....
     conn.close();//还能再打开
   conn.Open();
     ....
    conn.close();
    conn.Dispose();//直接销毁
   
}
作者: 非常小可    时间: 2012-5-9 15:59
close () 是关闭 ,关闭之后再以再open() ,而dispose()是销毁,dispose()之后不可以再open()
作者: 邢欢    时间: 2012-5-11 14:08
using在大括号结束时会自动调用dispose(),dispose()调用前会自动检查是否close(),若否,则先调用close();close()只是把对应对象的相关属性关闭,还可以再次打开(即open()),而dispose()则直接把对应对象销毁,不能在直接open()了,若要open()还得重新创建对象
作者: 卞云鹏    时间: 2012-7-1 01:53
close()是关闭,也就是说,我们这个所创立的对象连接仍然在内存上并没有消失,而dispose 则是销毁,即:在内存上已经消失,不能够再用了
我们经常在VS连接数据库中会看到 conn.dispose(); 意味着当前你所创立且引用的对象链接已经销毁。下面的代码将无法使用链接
作者: 王国文    时间: 2012-7-15 21:37
connectiong是一条通往数据库的路,close()相当于在路上设置-路障,(dispose()方法是把路拆了,不能再open())dispose()是对实现Idispose非托管资源的释放,在调dispose方法的时候,它会自动的去判断数据库有没有关闭,如果没有就调用close()方法关闭,然后再调dispose()释放资源!using是出了大括号就调用dispose的方法
,这样避免程序员忘记,在msdn很多都是用这种方法,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2