加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如果列表内部使用数组(已修复),列表如何动态工作?

发布时间:2020-12-15 18:22:14 所属栏目:百科 来源:网络整理
导读:我已经了解了c#中的泛型和数组(我知道c中使用指针的动态数组),我也知道数组是固定大小的,所以我们不能在初始化后改变它的大小,我们必须分配一个新的然后复制…… 最近,我一直在使用ILspy来查看.net程序集的源代码,我发现List内部依赖于私有数组,但我无法弄清
我已经了解了c#中的泛型和数组(我知道c中使用指针的动态数组),我也知道数组是固定大小的,所以我们不能在初始化后改变它的大小,我们必须分配一个新的然后复制……

最近,我一直在使用ILspy来查看.net程序集的源代码,我发现List内部依赖于私有数组,但我无法弄清楚它是如何工作的,所以我想知道它在技术上如何增长或调整大小在我记忆中的内存中?

解决方法

列表< T>分配一些大小的数组T []并将其用作其项目的存储,直到数组填满为止.在发生这种情况后需要添加新项目时,列表会分配一个新的更大的数组,并将旧数组中的所有项目复制到新数组中.然后可以毫无问题地添加新项目.

由于这种行为,将项目附加到List被描述为amortized O(1)操作:由于后备数组中有可用空间,因此大多数附加将花费恒定时间,但是一些附加将触发数组重新分配并占用大量内容更多时间.

从List的公共接口也可以看出实现的方式:有一个Capacity属性可以控制列表可以保存多少项而无需调整大小,还有一个constructor可以让你预先保留一些指定的容量(有助于避免不必要的调整大小操作)当你事先知道列表将至少达到一定的大小时).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读