2016-08-01 56 views
-2

我正在使用大型數組(每個數組有很多MB),但是在任何時候只有一個數組 - 一個被放置,另一個被創建以代替它。它們長度不等,但長度確實有一個上限。爲陣列/緩衝區保留空間以供重複使用

而不是每次都分配一個新的數組,有沒有辦法爲最大的數組分配空間(我可以找到)並使用創建每個新數組所需的任何長度。我不能使用完全相同的數組並使用一個變量作爲長度,因爲我需要將該數組提供給其他我不控制的方法,這些方法需要與其中包含的數據的長度完全相同(這是不恆定)。我記得讀過一些可以做到這一點的課程,我們要求它提供一個緩衝區,然後將它返回到課程中。

+0

哪裏是「創造一個新的*每次*」進入呢?你能不能把範圍移動到單例,比如'App'? –

+0

@RowlandShaw正如我寫的'我不能使用完全相同的數組,因爲它的大小並不總是恆定的。 – ispiro

+0

因此,如果它不總是恆定的,它必須包含不同的數據,在這一點上,你必須堅持/分解數據,所以你希望實現什麼?對於我們看不見的代碼,我們不可能提出改進建議(所以我們不知道數組大小的啓發式方法,或者保持緩存是否可行) –

回答

0

您可以創建自己的內存管理器,當您擁有的內存管理器太小或返回以前分配的內存管理器時創建最新的內存管理器。

您還可以使用InMemoryRandomAccessStream來存儲您的數據。此流將自行調整大小以保存您必須存儲的數據。 使用DataWriterDataReader,您可以輕鬆地向數據流插入/讀取數據。

要獲得從InMemoryRandomAccessStream一個輸入或輸出流,你可以使用:GttInputStreamAt(0)GetOutputStreamAt(0)