当前位置: 首页 > 编程语言 > C#

当需要更多空间时,列表在c#中占用两倍的空间,将1024加倍到2048会在某个时候变得不那么有效吗?Share

时间:2023-04-11 02:41:41 C#

当需要更多空间时,列表在c#中占用双倍的空间。将1024加倍到2048会在某个时候变得不那么有效吗?当数字较小时,它会迅速将数组列表的大小从2个内存地址增加到4个内存地址,但当它开始增加空间量时,它更接近数组列表中允许的最大空间量(更接近于2MB限制)。如果只是将数组的大小增加到某个点所需大小的一小部分,那么改变在这些较大区域中分配的空间会不会更有效?显然,现在将大小从1mb增加到2mb并不是什么大问题-但如果每小时有50k人运行,那么这样做会使数组大小增加一倍,我很好奇这是否足以证明改变它的工作方式是合理的。更不用说减少不需要的内存空间(理论上)。我的意思的一个小图形表示。ArrayLista中有4个元素,这是它当前的最大大小||||数组增加了一件事。arraylist现在变成了8个元素||||||||在这些大小级别上,我怀疑它会有所不同,但是当您每次分配1mb到2mb时,有人会做一些事情,比如将一些文件添加到arraylist或大约1.25mb的东西,然后分配0.75mb的不需要的空间。为了让您更好地了解System.Collections.Generic类当前在c#中运行的代码。它现在的工作方式是每次用户尝试向数据中添加数组太小的内容时,它都会将arraylist的大小(读取数组)加倍。将大小加倍是一个很好的解决方案,并且在您实际将其增大到比技术上需要的大得多之前都是有意义的。这是类特定部分的来源:privatevoidEnsureCapacity(intmin){if(this._items.Length>=min)return;//这就是我指的intnum=this._items.Length==0?4:这个._items.Length*2;如果((uint)num>2146435071U)num=2146435071;如果(num