调用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 方法将不执行任何操作。