首页 新闻 会员 周边 捐助

C# 给对象赋null值会释放内存吗?

0
[已解决问题] 解决于 2012-04-19 14:34

比如A a=new A();

a=null;

这时候a所占用的内存会释放掉吗?还是只是将a的指针改变为null,而new A();产生的数据仍在内存中?

另外请问string a="";和string a=string.Empty;是一样的吗?

hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2012-04-19 13:37
< >
分享
最佳答案
2

不一定,这个涉及到GC 垃圾回收机制,具体的回收是由.NET运行时决定的,但是只有对象不再执行任何引用时才会释放,也就是说你的a=null;只是一个必要条件

当对象一定不再有用的时候GC就可以将对象回收了,判断一个对象是否一定不再有用的标准就是没有任何的变量指向它。当一个变量设置为null的时候。
Person p1=new Person(“aa”);//在内存中创建了Person对象
Person p2 = p1;//把p2指向p1指向的对象!这一刻p1指向着aa,p2就顺着p1找到了lilei
p1=null;//p1不再指向aa。aa不能回收,因此p2还在指着它
p2= new Person(“gaga”);//aa可以回收,因为没有任何变量指着它。
当没有任何变量指向aa的时候,就没法再顺着任何的变量把p3指向lilei了。
当一个对象一旦被最后一个指向它的变量抛弃的时候(=null或者变量出了作用域),不可能再有任何变量指向它,它就像断了线的风筝,再也飞不回来了,因此就可以被回收了。当一个对象找不回来的时候就可以被GC了。

GC类中提供了对GC进行控制、监测的方法,比如GC.Collect()可以强制立即开始进行GC,但是一般不要去手动干预GC。没有特殊理由,不要去调用GC.Collect(),让.net自己决定什么时候去回收内存。

天呢,lz原来一份都没撒。。。。。。。。。#¥%……###@¥%&(*

奖励园豆:5
Halower | 小虾三级 |园豆:1723 | 2012-04-19 13:57
其他回答(2)
0

a所占用的内存会释放掉吗?

在这个时刻,还没有。

还是只是将a的指针改变为null,而new A();产生的数据仍在内存中?

 

在这个时刻,是的。

string a="";和string a=string.Empty;是一样的吗?

这两个表达式效果相同,但并不意味""和string.Empty是一样的。

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-04-19 13:48

string a="";和string a=string.Empty;区别在哪儿?

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2012-04-19 13:55

@hexllo: 说了啊,string a="";和string a=string.Empty;没什么区别。

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2012-04-19 13:57

@hexllo: 但是""和string.Empty有区别。

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2012-04-19 13:58

@水牛刀刀: 嗯,那么""与string.Empty的区别是什么?

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2012-04-19 14:28

@hexllo: ""是常量,string.Empty是变量。

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2012-10-11 17:25
0

null,是這個對象不可以用了。內存回收,需要運行時決定。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-04-19 14:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册