首页 新闻 会员 周边 捐助

为什么很多人喜欢给socket= null

0
[已解决问题] 解决于 2013-06-14 14:36

socket.Close();
socket= null;

为啥很多人close方法调用后 还要赋值null?这不是多此一举吗?

吴顶天的主页 吴顶天 | 初学一级 | 园豆:39
提问于:2013-05-20 20:40
< >
分享
最佳答案
0

GC中,对没有引用的地址会进行回收,但其实,MSDN中是这么解释CLOSE函数的

Close 方法可关闭远程主机连接,并释放所有与 Socket 关联的托管资源和非托管资源。关闭后,Connected 属性将设置为 false

 

其实调用CLOSE已经可以实现对此类的垃圾回收机制,不必要再=null。但是其实这是一个好习惯,但你自己写的类,没有继承IDISPOSE方法的时候,=null很关键,尽快的垃圾回收,就是尽快的释放系统资源

奖励园豆:5
diorlv2010 | 初学一级 |园豆:188 | 2013-06-14 10:30
其他回答(5)
0

这个不需要管别人怎么写!我们可以借阅微软的写法!微软怎么写!我们就怎么写!这样一般不会出错!效率也会更高

罗志强 | 园豆:154 (初学一级) | 2013-05-20 23:53
1

尽早将对象设置为null,可以方便在垃圾回收器回收时直接回收掉为null变量先前引用的对象,这样有利于内存的尽早释放。

滴答的雨 | 园豆:3660 (老鸟四级) | 2013-05-21 00:07
0

同意@滴答的雨的,尽早回收资源,减少内存占用,也是增加程序性能的必要处理.

三阶 | 园豆:1636 (小虾三级) | 2013-05-21 10:25
1

估计是早期c/c++沿用过来的写法,C#中不需要这样

如果 socket = null; 后面还有一大堆代码在执行的话,可能有方便到垃圾回收,但是做好封装后 socket.Cose(); 一般都会在离方法底部比较近的地方,当方法执行完成后,变量就会被释放; socket = null; 就没有意义了

这是我的理解,如有不对,请指出。

JoJoZhou | 园豆:233 (菜鸟二级) | 2013-05-21 13:27
0

便于回收

程序诗人 | 园豆:313 (菜鸟二级) | 2013-06-04 15:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册