2012-07-21 44 views
1

不是最近我發佈了一個完全用Java平臺編寫的遊戲。目前,我試圖儘可能多地獲得性能。看來在我的遊戲的情況下,問題是我更經常使用ArrayList容器在Map可能更適合的地方。爲了解釋我自己,我這樣做是因爲我害怕動態內存分配會在場景後面觸發(Android上的Map/Tree結構)。也許在Android/Java平臺上有某種我不知道的結構,它會爲我提供快速搜索結果,並且在添加新元素時不會動態分配額外內存?Android中的地圖結構和動態內存分配

更新: 例如,我使用ArrayList結構來保存大部分遊戲的粒子。當然,如果系統需要遍歷整個容器來刪除一個實體對象(當然在最壞的情況下),那麼獨立地(而不是順序地)去除它們是非常痛苦的。

+0

舉一些你認爲自己在錯誤地使用地圖的例子。你可能並不需要優化你在哪裏/如何思考。你有沒有分析你的代碼? – you786 2012-07-21 21:24:16

+0

做了分析,這就是爲什麼我問這個問題;) – cplusogl 2012-07-21 21:28:29

+1

你知道,你可以在互聯網上說「對接」。 – Falmarri 2012-07-21 23:34:36

回答

0

您是否預分配您的元素對象,並重新使用空容器而不是分配新容器?

+0

是的,我正在使用某種形式的池模式 – cplusogl 2012-07-21 21:24:59

1

我不會擔心由於內存分配造成的減速,除非您明確地發現它是一個問題。內存分配並不是真正導致Android遊戲速度下降的原因,而是在GC運行時,這通常是問題所在。除非您經常從Map中插入和刪除,否則您可能不必擔心分配。

更新:

而不是使用一個地圖,你可能要考慮只標記顆粒作爲「死」的時候,你不再需要他們,並使用該標誌來跳過它們在您的更新迭代。將對死粒子的引用存儲在新的deadParticles ArrayList中,並在需要新列表時從該列表中取出一個。這樣,當你需要它們時,你可以立即獲取粒子。

+0

正如我剛剛在UPDATE部分中所寫的那樣,粒子可能會在...中感到痛苦,並且他們將會絕對經常插入/移除:/ – cplusogl 2012-07-21 21:33:07

+0

我不得不重新考慮它我不太確定這是否是我試圖找到的解決方案。儘管如此,我更喜歡某種Map/Tree容器,它爲其內部工作提供了某種內部池化機制(在我寫的代碼中有很多地方當Map/Tree更適合),以避免動態分配:/ – cplusogl 2012-07-21 21:40:18