Scalaで書かれたAndroid用ゲームでは、プールしたいオブジェクトがたくさんあります。最初に、同じプール内にアクティブ(可視)インスタンスと非アクティブインスタンスの両方を作成しようとしました。これは、両方ともGCを引き起こし、遅いというフィルタリングのために遅かった。ScalaのGC量を最小限にしてプールする
私は自由なインスタンスを取得する必要があるので、2つのデータ構造を使用するように移動しました。最初のものをパッシブプールから取り出し、アクティブプールに追加します。また、アクティブなプールへのランダムアクセスを高速化しました(インスタンスを非表示にする必要がある場合)。私はこれのために2つのArrayBuffersを使用しています。
私の質問は次のとおりです。どのデータ構造がこの状況に最適でしょうか?そして、GCをできるだけ避けてAndroid(メモリとCPUの制約)上で効率的になるように、それらの(またはそれらの)特定のデータ構造をどのように追加および削除する必要がありますか?
表示されるコードでは、基本的に「アクティブな」ArrayBuffer全体を反復処理しますか? –
いいえ、それは他の場所でゲームエンジンによって行われますが、私は、プレイエリアを出ている弾丸の例を確認するためにアクティビティを繰り返し実行する必要があります。これは数フレームごとに実行されるので、表示ループとほぼ同じくらい必要です。 – vertti
私は、ビットマップ(ビットをアクティブに設定したもの)を使用し、単一の配列バッファを使用しようと考えていました。そうすれば、すばやくすべてのアクティビティーを見つけることができます(とにかく、どこにいなくても素早く見つけることができます)。私は、ランダムアクセスを保ち、GCを避けるよりよい方法を考えることはできません。誰かがアイデアを持っているかどうかを知りたい。どのような種類のアクティブからアクティブではないのですか?どれくらいの合計がありますか? –