读书人

调用list的TrimExcess方法后为什么lis

发布时间: 2012-05-28 17:59:33 作者: rapoo

调用list的TrimExcess方法后为什么list的Capacity属性没变?
http://www.cnblogs.com/buguge/archive/2012/05/25/2518480.html#commentform

这个帖子是介绍list的一些内存分配的情况

C# code
List<int> value = new List<int>(4);//此时 Count:0 Capacity: 4            for (int i = 1; i <= 5; i++){    value.Add(i);}//此时 Count:5 Capacity: 8            value.TrimExcess();//此时 Count:5 Capacity: 5            //remove an itemvalue.RemoveAt(4);//此时 Count:4 Capacity: 5value.TrimExcess();//此时 Count:4 Capacity: 5---------------[color=#FF0000]Capacity为什么不是4呢?请高手指点[/color]//remove another itemvalue.RemoveAt(1);//此时 Count:3 Capacity: 5value.TrimExcess();//此时 Count:3 Capacity: 3value.Clear();//此时 Count:0 Capacity: 3value.TrimExcess();//此时 Count:0 Capacity: 0


其他地方调用TrimExcess方法后list长度都是和元素个数一样,唯独那里RemoveAt(4)后再TrimExcess长度不变

和博主一样不明白,望指教


[解决办法]
看帮助说的很明白了

如果不向集合中添加新元素,则此方法可用于最小化集合的内存开销。 但是,重新分配和复制很大的 List<T> 的开销可能很大,因此,如果列表大于容量的 90%,则 TrimExcess 方法将不执行任何操作。

读书人网 >C#

热点推荐