最近在写一个项目,项目经理要求凡是使用到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用完后要马上置空吗?
}
}
完全没必要,这种资源属于托管资源CLR会自动回收,但是非托管资源 比如读文件的操作,读完后一定要释放,因为这部分资源CLR没法回收的
既然这样,采用命名方式的比如:
ClassA
{ A1{返回一个Table}}
ClassB
{
A a=new A();
Table dt=a.A1();
//上面这两句和这一句“Table dt=new A().A1();”有什么区别?那个对系统的性能更好?
//我自己认为写两句的好处是还可以写第三句“a=null”,但如果采用一句的话就没有置空了
}
@听雨读诗: 这与系统性能严格来说我觉得是关系不大的,性能通常指读写,与计算相关的速度,而你这里只是table这个对象占用着内存,你将它赋为null只是将它占用的数据内存释放,但是还不算真正的被回收,因为实例还包括同步索引块等其它信息这一步分是一定是GC才能回收的,所以你的做法只是做到了释放数据占用的内存。建议你可以简单的了解下GC的基本原理,GC何时会回收资源,一代二代三代每代的容量是多少,有了基本了解你就知道这种方法有没有意义了
完全没必要,垃圾回收器会自动回收的。补充一下楼上的,非托管资源也没必须给变量赋值为null,非托管资源自有自己的回收资源的方法(dispose或close)
我指的释放就是指调用Dispose方法
@Zery: 嗯嗯,对的,帮你明确一下^ ^
@Shine Ss: 谢谢 补充~~
不需要,垃圾回收器会自动回收