缓冲区增长需要三倍内存 - 是否有更高效的方式(通用)?

时间:2016-01-06 08:11:57

标签: c# memory out-of-memory buffer bytearray

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

在此操作期间,应用程序内存使用量为original_size * 3,因为我在内存中都有原始缓冲区和新缓冲区。

当使用大小接近300 mb的缓冲区时,此操作需要900 MB的内存,并且很容易在32位应用程序中导致OutOfMemoryException

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

我可以做些什么吗?

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

补充:

  1. 我不知道初步的能力。
  2. 缓冲区用于序列化过程。
  3. 很抱歉误导,问题是关于通用的缓冲增长问题 - 不是解决特定的应用问题

1 个答案:

答案 0 :(得分:0)

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

Which is better? array, ArrayList or List (in terms of performance and speed)