Swing アニメーションの実行が非常に遅い
問題: Swing 内にシミュレートされた車の複数の JPanel 表現を追加すると、重大な速度低下が発生するアニメーション。
説明:
車の到着を伴う離散イベント シミュレーションは、Java Swing を使用して実装されています。 Car クラスは、現在の位置や速度などの関連属性を持つ個々の車両を表します。予定されている車の到着イベントごとに、Car オブジェクトが Model クラスの ArrayList に追加されます。
View クラスでは、別のスレッドが Car オブジェクトの ArrayList を継続的に反復処理し、move() メソッドとJPanel 表現を更新しています。
問題:
最初は、いくつかのアニメーションが道路を走る車もスムーズです。ただし、車の数が増えると、アニメーションがひどく遅くなります。
分析:
パフォーマンス低下の原因は、ArrayList への過剰なアクセスにあると考えられます。各車の位置は、move() メソッドを呼び出すことによって更新されます。このメソッドでは、システムが ArrayList からオブジェクトを取得し、その属性を変更する必要があります。この繰り返しのプロセスは、オブジェクトの数が増えるにつれてますます非効率になります。
解決策:
ArrayList に繰り返しアクセスする代わりに、より高速な検索と取得を可能にするデータ構造を使用します。オブジェクトの使用が推奨されます。適切なオプションの 1 つは、各 Car オブジェクトが一意のキー (たとえば、その識別子) にマップされる HashMap です。 HashMap を使用すると、リスト内のオブジェクトの数に関係なく、一定時間 (O(1)) で車の位置を取得できます。さらに、定期的なガベージ コレクションを利用して、ArrayList から不要なオブジェクトを削除し、メモリ使用量を最適化することができます。
以上が多くの車を追加すると、スイング カーのアニメーションが非常に遅くなるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。