.netFramework List<T>
2021-05-30 20:02
标签:表示 就是 xxxxxx trim 实现 对象 结果 需要 copy List 例:T[0]直接可以得到值 数组长度和list数关系 假设数组的长度是32 list是32 这种情况是良好的 数组长度够用 但此时如果add一个list,数组长度就需要扩容,扩容 至少是原来的2倍 变成 长度是64 这个64的数组是一个完全新的数组,也就是说原来的32长度的数组,需要等待GC去回收 旧的32数组会执行Array.Copy命令将数据拷贝到新的64数组上 所以说 使用list如果遇到扩容情况,可能造成内存的浪费 (33个list 需要64长度数组 31个长度的浪费) copy操作很耗时,如果大量使用list可能造成程序反映慢的情况 对于内存的浪费, List 中有TrimExcess()方法 (将数组长度*0.9和list数比较 结果大于list数的话,就将数组长度变为list数) 对于list.add 和list.addrange 添加多个时 list.add 需要for去一个个add addrange中如果对象实现来icollection 接口的话 整体的消耗要远远小于for 去一个个add 对于list.removeat,list.removerange和list.removeall来说 删除多个对象时 removerange 的消耗要小于removeat, removeall的实现和removerange,removeat的实现是不同的 removerange,removeat 是用Array.copy 去将remove的数据移除,后面的数据放到移除的位置,最后剩下的设置成default (删除时数组的长度不会发生变化,节省内存要调用TrimExcess()方法) 而removeall 举个例子 x表示删除o表示正常 00xxxx000xx00 做法 000xxxx00xx00 0000xxxx0xx00 00000xxxxxx00 000000xxxxxx0 0000000xxxxxx 最后将xxxxxx设置成default 没有用到copy只是赋值所以能用removeall就用removeall 标签:表示 就是 xxxxxx trim 实现 对象 结果 需要 copy 原文地址:https://www.cnblogs.com/dzh1990/p/14655548.html