缓冲区增长需要三倍.是否有更有效的方法(通用)
本文关键字:有效 通用 方法 是否 三倍 缓冲区 | 更新日期: 2023-09-27 18:29:04
假设我有一个byte[]
(缓冲区),我需要将它保存在内存中。它还需要发展战略x2
。因此,每次我需要它增长时,我都必须创建另一个两倍大的byte[]
,并在那里复制元素。
在这个操作过程中,应用程序内存使用率是original_size * 3
,因为我在内存中有原始缓冲区和新缓冲区。
当使用大小接近300 mb的缓冲区时,此操作占用900 mb的内存,并且可以很容易地在32位应用程序中生成OutOfMemoryException
。
我知道,让这一点更好的唯一方法是选择另一种增长策略:在一定的恒定大小后,使缓冲区线性增长(例如,每次+5mb)。但它仍然需要600 mb的我的300 mb的数据!
我能做点什么吗?
我考虑的是在内部维护缓冲区列表的结构,这样在增长时就不需要复制任何东西——只需向列表中添加新的缓冲区。它应该提供使用这些缓冲区执行操作的方法,就像使用一个大缓冲区一样。.NET中有这样的东西吗?或者通常它叫什么样?
添加:
- 我不知道初步容量
- 缓冲区用于序列化过程
- 很抱歉造成误导,这个问题是关于通用的缓冲区增长问题,而不是关于解决特定的应用程序问题
在这种情况下,我认为应该使用ArrayList或List而不是数组。List比ArrayList好。欲了解更多信息,请访问:
哪个更好?array、ArrayList或List(就性能和速度而言)