首页 新闻 会员 周边

关于Net里面调用函数的对象传递问题:对象在函数里面使用完后是否要及时将指针置空?

0
悬赏园豆:10 [已解决问题] 解决于 2014-05-12 10:09

最近在写一个项目,项目经理要求凡是使用到new对象的地方,用完后一定要将引用的指针置空,大家觉得有这个必要吗?这样会加速垃圾回收吗?

类1(模型)

class Model A

{

  属性 

}

类2(操作)

class BLL B

{

   //对A的操作,比如说New对象

  B1

  {

    A a=new A();

    //这里new出来的a用完后要置空吗?

  }

}

类3(比如说MVC里面的控制器)

class Controller C

{

  //调用B类中的方法

  C

  {

    B b=new B();

    //这里new出来的b用完后要马上置空吗?

  }

}

听雨读诗的主页 听雨读诗 | 初学一级 | 园豆:47
提问于:2013-11-22 15:22
< >
分享
最佳答案
0

完全没必要,这种资源属于托管资源CLR会自动回收,但是非托管资源 比如读文件的操作,读完后一定要释放,因为这部分资源CLR没法回收的

收获园豆:10
Zery | 大侠五级 |园豆:6151 | 2013-11-22 15:27

既然这样,采用命名方式的比如:

ClassA

{ A1{返回一个Table}}

ClassB

{

  A a=new A();

  Table dt=a.A1();

  //上面这两句和这一句“Table dt=new A().A1();”有什么区别?那个对系统的性能更好?

  //我自己认为写两句的好处是还可以写第三句“a=null”,但如果采用一句的话就没有置空了

}

听雨读诗 | 园豆:47 (初学一级) | 2013-11-22 15:42

@听雨读诗: 这与系统性能严格来说我觉得是关系不大的,性能通常指读写,与计算相关的速度,而你这里只是table这个对象占用着内存,你将它赋为null只是将它占用的数据内存释放,但是还不算真正的被回收,因为实例还包括同步索引块等其它信息这一步分是一定是GC才能回收的,所以你的做法只是做到了释放数据占用的内存。建议你可以简单的了解下GC的基本原理,GC何时会回收资源,一代二代三代每代的容量是多少,有了基本了解你就知道这种方法有没有意义了

Zery | 园豆:6151 (大侠五级) | 2013-11-22 16:08
其他回答(2)
0

完全没必要,垃圾回收器会自动回收的。补充一下楼上的,非托管资源也没必须给变量赋值为null,非托管资源自有自己的回收资源的方法(dispose或close)

Shine Ss | 园豆:214 (菜鸟二级) | 2013-11-22 15:28

我指的释放就是指调用Dispose方法 

支持(0) 反对(0) Zery | 园豆:6151 (大侠五级) | 2013-11-22 15:50

@Zery: 嗯嗯,对的,帮你明确一下^ ^

支持(0) 反对(0) Shine Ss | 园豆:214 (菜鸟二级) | 2013-11-22 16:46

@Shine Ss: 谢谢 补充~~

支持(0) 反对(0) Zery | 园豆:6151 (大侠五级) | 2013-11-22 17:37
0

不需要,垃圾回收器会自动回收

枢木 | 园豆:103 (初学一级) | 2013-11-23 10:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册