首页 新闻 搜索 专区 学院

有谁知道Dictionary.Clear()方法和直接给Dictionary对象赋空有什么区别?

0
[已解决问题] 解决于 2009-06-19 23:08

Dictionary<string,int> x=new Dictionary<string,int>();

x.add(...);

...

然后我想清空x,是直接给它赋个null好呢,还是用x.clear()方法好?

问题补充: 补充说明:x需要经常做这种操作。 希望大家都做文明人,不要他妈的说脏话。 问题补充:我觉得这个问题跟垃圾回收及内存分配的机制有关。请大家说明一下方法一clear()方法和方法二赋null再new的方法在经常做这种操作的时候,哪个效率更高? 有谁可以说怎么样做,效率高?
灰灰狼的主页 灰灰狼 | 初学一级 | 园豆:5
提问于:2009-06-06 15:28
< >
分享
最佳答案
0

如果你不要用x了就赋为null,不然就clear

Gray Zhang | 专家六级 |园豆:17610 | 2009-06-06 16:00
其他回答(6)
0

老子日都一样啊

魔鬼的主义 | 园豆:250 (菜鸟二级) | 2009-06-06 16:38
0

x.clear()方法是清空里面的项,而=null是意思是所有的内容 为空,这样的话,如果不用则好,如果下面还要用的话可能就效率上就不如null了

看看你想要做什么然后选一个吧

苏飞 | 园豆:2024 (老鸟四级) | 2009-06-06 16:39
0

有区别。

Object o = null; 此时并没有在内存中分配空间,并且没有分配内存地址指针。

当实例化后,将会分配空间,例如Object o = new Object();此时也会分配内存地址指针。

但是X.Clear()将清空内存分配的内容,并不占用空间,但是分配内存地址指针还在。

心不蒙尘 | 园豆:205 (菜鸟二级) | 2009-06-06 22:34
0

形象地说,如果赋以空值,你就不能再用x变量装载内容了,就像是把一个装满货物的大卡车扔了,丢在大街上弃用了,再想运货时你就没有车了,只能再弄辆新车(new一个新的Dictionary<>对象)。

而Clear()方法只是将里面的内容清空,就相当于把车上的货物全扔掉,但车还在,可以再装新的东西。

 

设为null时只是将x变量指向空的地方,而原来创建的那个Dictionary<>对象并没有立即从内存中消失,它需要等待.net垃圾回收器进行回收,而在此之间假如你又要用到Dictionary<>对象,那么你又得new一个新的Dictionary<>对象,这样无论内存还是CPU占用情况都有所增加。

 

如果你要经常性的使用Dictionary<>对象,显然是Clear()性能更好,你可以创建一个静态成员放置它以重复使用,而不是将其设为临时变量不断创建和弃用。

斯克迪亚 | 园豆:4124 (老鸟四级) | 2009-06-06 22:51
0

斯亚说得很形象。

Jerry Qian | 园豆:19 (初学一级) | 2009-06-07 21:25
0

说不要说脏话,自己却先说了,不知道你是不是“他妈的”

小气鬼 | 园豆:202 (菜鸟二级) | 2013-07-20 22:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册