.NET中数组的隐秘特性[10]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 dy_2000_abc 的 blog

常量字段,表示默认容量


       一个arraylist实例共占用20字节的内存(8字节的对象开销内存+12字节的实例信息),这不包括内部数组(_items)占用的空间。
       给arraylist添加新元素时(比如调用addrange方法),需要超出arraylist的初始容量,arraylist将会自动扩大容量。arraylist的容量或者加倍或者增加到新的 count,取二者之中较大者,内部数组(_items)也被重新分配以容纳新元素,并且现有的元素被复制到新数组中。出于优化性能的考虑,如果预先知道长度,应该为arraylist分配足够的内存一避免不必要的复制。如果所有的数组元素都已经添加进去,并且不再对数组(_items)进行扩充,你应该调用toarray方法将它装换成类型安全的数组,这样,无论在内存使用还是性能上都得到极大的优化。
       我们可以调用trimtosize方法来截去arraylist的未使用部分,这个方法实际上是执行一次元素复制。在调用trimtosize后,要真正的释放数组占用的内存,还要调用clear方法。要注意的是,在空arraylist上执行trimtosize方法是将arraylist的容量设置为默认容量,而不是零。需要注意的是,创建arraylist如果将容量设为0,clr将使用默认值16来创建。
       arraylist类不是array类的一个完全的替代,我觉得arraylist比多维数组的性能要好得多,我将在另外一篇文章详细分析二者的区别,特别在性能方面。

 

array

arraylist

内存占用

值类型数组中的数据没有装箱,每个元素的长度等于相应的值类型的长度。

引用类型数组的每个元素的长度等于intptr.size

本文关键:数组 Array ArrayList .net
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top