実際にはもっと速いのは何ですか?単純に新しいArrayList/ArrayCollectionを作成するか、既存のArrayList/ArrayCollectionを再利用してその要素を削除しますか?AS3/Flexパフォーマンス - 新しいArrayListとArrayList.removeAll()
パフォーマンスが常に問題となるモバイル用に開発しています。そのため、私は最も速い方法の後にいます。
実際にはもっと速いのは何ですか?単純に新しいArrayList/ArrayCollectionを作成するか、既存のArrayList/ArrayCollectionを再利用してその要素を削除しますか?AS3/Flexパフォーマンス - 新しいArrayListとArrayList.removeAll()
パフォーマンスが常に問題となるモバイル用に開発しています。そのため、私は最も速い方法の後にいます。
mycollection.source = [];
です(mycollection.source = new Array()
ではなく)
別のオプションは、リンクリストおよびオブジェクト・プールを使用することです。オブジェクトプールを使用すると、オブジェクトを削除して新しいオブジェクトを作成する代わりに、オブジェクトのプロパティを書き直すことができます。配列の代わりにリンクされたリストにそれらを保持すると、それらをループするほうがはるかに高速です。だから、たくさんのオブジェクトをループしたいのであれば、リンクされたリストを使うことになりますが、並べ替えが必要な場合は配列とベクトルが高速になります。
もう一つの懸念事項はメモリ使用です。アプリケーションのメモリーを小さくするだけでなく、宣言するオブジェクトが多いほど、ガベージコレクターはクリーンアップのための時間がかかるときに多くの作業を行う必要があります。
Here's an interesting blog post ArrayList/ArrayCollectionの消去の最適化について。明らかに、mycollection.source = new Array()
を設定すると、大きなデータセットを持つmycollection.removeAll()
よりもはるかに高速です。removeAllはすべてのイベントリスナーが確実に削除されるためです。
このように、新しいArrayListはArrayList.removeAll()に勝る可能性が最も高いですが、バインディング/リスナーに与える影響が少ないため、新しいソース配列が適しています。さらに高速
興味深い。私のデータセットは実際には非常に小さい(ほとんどが30未満、約100アイテムのうちの1つ)。私はそれがベンチマーク(今、3つ、ありがとう!)オプションに来て、何が起こるかを見に来ると思います。 – AlBirdie