現在、C# (Windows Phone 用) で開発したゲームを Java (Android) に移植中です。
Java バージョンでメモリの問題が発生しています。これは、プロファイリング後、メモリ内の膨大な数のString
オブジェクトから発生しているように見えます。これは、明らかに の不変の性質によるものString
です。これで、プレーヤーのスコアを画面にレンダリングするメソッドまでたどることができました。ここでInteger.toString()
は、スコアが変化するたびに a が使用されます (1 秒間に何度も)。使用しているフレームワークのテキスト レンダリング メソッドは のみを引数として受け入れるため、実際には a を使用できませんStringBuilder
(これは C# バージョンにあるものです) String
。したがって、とにかく変換が行われます。
これはJavaでよくある問題ですか?誰かが解決策を推奨できますか (フレームワーク開発者に連絡してメソッドを変更するよう依頼する以外に!)?
アップデート:
ゲームは非常にペースが速く、スコアは現在の「ステージ」の開始からの経過時間に部分的に基づいています。1 秒間に 15 回更新されます。
文字列への参照は保持していませんが、フレームワークがこれらの文字列をリークまたは複製しているのではないかと考えているので、それを調べようとしています (これは公開フレームワークではなく、私の知る限り、使用されていませんこの種のテンポの速いゲームではまだ)。
プーリングは良い提案であり、私はそれを試してみることを考えましたが、一定の値を設定するにはスコアリング システムを変更する必要があります。