缓冲区增长需要三倍.是否有更有效的方法(通用)

本文关键字:有效 通用 方法 是否 三倍 缓冲区 | 更新日期: 2023-09-27 18:29:04

假设我有一个byte[](缓冲区),我需要将它保存在内存中。它还需要发展战略x2。因此,每次我需要它增长时,我都必须创建另一个两倍大的byte[],并在那里复制元素。

在这个操作过程中,应用程序内存使用率是original_size * 3,因为我在内存中有原始缓冲区和新缓冲区。

当使用大小接近300 mb的缓冲区时,此操作占用900 mb的内存,并且可以很容易地在32位应用程序中生成OutOfMemoryException

我知道,让这一点更好的唯一方法是选择另一种增长策略:在一定的恒定大小后,使缓冲区线性增长(例如,每次+5mb)。但它仍然需要600 mb的我的300 mb的数据!

我能做点什么吗?


我考虑的是在内部维护缓冲区列表的结构,这样在增长时就不需要复制任何东西——只需向列表中添加新的缓冲区。它应该提供使用这些缓冲区执行操作的方法,就像使用一个大缓冲区一样。.NET中有这样的东西吗?或者通常它叫什么样?


添加:

  1. 我不知道初步容量
  2. 缓冲区用于序列化过程
  3. 很抱歉造成误导,这个问题是关于通用的缓冲区增长问题,而不是关于解决特定的应用程序问题

缓冲区增长需要三倍.是否有更有效的方法(通用)

在这种情况下,我认为应该使用ArrayList或List而不是数组。List比ArrayList好。欲了解更多信息,请访问:

哪个更好?array、ArrayList或List(就性能和速度而言)