MacでAirアプリがアイドル時でもCPUを無駄に食う問題

Windowsでは問題ないようだが、MacでAirアプリケーションを立ち上げると何もしてなくてもCPUを3から5%程度消費しているのがずっと気になっていた。

調べてみると、Adobeもこの問題を認識しているようで今後のFPで改善していくとの事。

とりあえずのwork aroundとして、Adobeを始め複数の人々が記事を書いてくれている。

Performance Tips for Adobe AIR - Adobe AIR Team Blog
gskinner.com: gBlog: Idle CPU Usage in Adobe AIR and Flash Player
arnotify Writing well-behaved, efficient, AIR applications

これらをまとめてみる。


◯常にフレームレートを最小限にする
アニメーションが必要な時はフレームレートを上げ、設定ウインドウなどあまり速度が必要のない時は低くし、アプリケーションがアクティブでない場合やウインドウが何も表示されていない場合などはフレームレートを1にする。


◯ENTER_FRAMEを使わない
これはほとんどの場合で使わない方がいいようだ。代用できる場合はTimerで代用する。


◯出来る限りTimerを少なくする
Timerを使わなければならない場合でも出来る限り少なくできるように設計する。

例えば複数のウインドウで時間表示などのためにタイマーが必要な場合、マネージャークラスを作ってここでのみTimerを使い、配列にためたウインドウに対して一気に更新処理を行なうなど。

setInterval()も内部的にTimerを使っているようなので、これも最小限の使用にとどめる。


◯EventListenerも出来る限り少なくする
MouseEventなど継続的に状態を取得しなければならないようなEventListenerも必要な時だけ追加して必要なくなったらできるだけすぐに削除する。

MouseEnabledやMouseChildrenをfalseにすることでも効果があるようだが、フレームレートのコントロールほどの効果はないようだ。しかし、少しでも軽くするためには考慮すべきだろう。


実際にこれらのテクニックを開発中のモニタリングアプリケーションで使ったところ,アイドル時で4から5%程度消費していたものが1から2%程度までになった。確実に効果がある。

問題はMacでの話だが、Windowsで動作させる場合でも同様の最適化を行なうべきだろう。かえってこの問題があったおかげでパフォーマンスチューニングの勘所がわかったというところだ。

ただ、開発者が気にしなくてもプレイヤー側で自動的に最適化してくれた方がいいに決まっているが(^^);


しっかし、MacのFPはパフォーマンスの問題といいマウスホイールの問題といい日本語のインライン入力の問題といい、まだまだ問題がありそうだなぁ〜

コメント

このブログの人気の投稿

レオナルド・ダ・ビンチはなぜノートを「鏡文字」で書いたのか?

macでsmb(samba)共有サーバーに別名で接続(別アカウント名で接続)する方法

Google DriveにCURLでアップロードするには?