观《深入理解C#》有感---List<T>对于ArrayList的优化提升
相对List<byte>为例,ArrayList如果想要存储byte,所要付出的代价如下(假定在32位CLR):
- byte装箱消耗:8字节(装箱后的对象头,通常8字节,包括同步块索引和类型指针)
- 存储数据消耗:4字节(1字节存储,3字节填充(内存对齐))
- 存储引用消耗:4字节
所以每个对象至少16字节,如果采用List<byte>则无此问题,它会用byte[]类型的成员数组代替ArrayList中的object[]
所以我们可以看到泛型带来惊喜的改变,不仅节省了内存,而且加快了执行速度,不需要花时间装箱,也不用对字节进行拆箱而检查类型,更不需要对不再引用的已装箱值进行垃圾回收。