2016-08-01 27 views
-2

我正在使用大型数组(每个数组有很多MB),但是在任何时候只有一个数组 - 一个被放置,另一个被创建以代替它。它们长度不等,但长度确实有一个上限。为阵列/缓冲区保留空间以供重复使用

而不是每次都分配一个新的数组,有没有办法为最大的数组分配空间(我可以找到)并使用创建每个新数组所需的任何长度。我不能使用完全相同的数组并使用一个变量作为长度,因为我需要将该数组提供给其他我不控制的方法,这些方法需要与其中包含的数据的长度完全相同(这是不恒定)。我记得读过一些可以做到这一点的课程,我们要求它提供一个缓冲区,然后将它返回到课程中。

+0

哪里是“创造一个新的*每次*”进入呢?你能不能把范围移动到单例,比如'App'? –

+0

@RowlandShaw正如我写的'我不能使用完全相同的数组,因为它的大小并不总是恒定的。 – ispiro

+0

因此,如果它不总是恒定的,它必须包含不同的数据,在这一点上,你必须坚持/分解数据,所以你希望实现什么?对于我们看不见的代码,我们不可能提出改进建议(所以我们不知道数组大小的启发式方法,或者保持缓存是否可行) –

回答

0

您可以创建自己的内存管理器,当您拥有的内存管理器太小或返回以前分配的内存管理器时创建最新的内存管理器。

您还可以使用InMemoryRandomAccessStream来存储您的数据。此流将自行调整大小以保存您必须存储的数据。 使用DataWriterDataReader,您可以轻松地向数据流插入/读取数据。

要获得从InMemoryRandomAccessStream一个输入或输出流,你可以使用:GttInputStreamAt(0)GetOutputStreamAt(0)