SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Flash Builderのプロファイラを使用したパフォーマンスチューニング

Flash Builder 4.5 Premiumのプロファイラ機能を試してみよう!

プロファイルしてみる

プロファイルの開始

 それでは、サンプルプロジェクトを使用して実際にプロファイルを行ってみます。記事上部のリンクからサンプルプロジェクトをダウンロードし、Flash Builderに読み込んでください。

 ProfileTuning.asを実行すると、真っ白な画面が表示されます。クリックすると、クリックした場所に黒い球体が描画されます。マウスの動きに応じて球体がマウスポインタの方に少しずつ動き、球体をクリックすると、クリックされた球体は消えます。

 動作が確認できたら、いったんサンプルアプリケーションを終了して、今度はプロファイラを実行し、再度サンプルアプリケーションを操作してみます。プロファイル開始時のダイアログはデフォルトのままで構いません。クリックで球体を作るたびに、メモリの使用量がどんどん増えていくのが分かります。しかし、球体をクリックして消しても、メモリ使用量が減っていく様子はありません。ガベージコレクタを実行しても、やはりメモリ使用量は減りません。このサンプルアプリケーションは、メモリリークを起こしていることが分かります。

メモリ使用量が増えたままのメモリ使用量ビュー
メモリ使用量が増えたままのメモリ使用量ビュー

原因となる操作を特定する

 このサンプルはActionScriptプロジェクトで作られており、またクラスは2つしか無いので、ライブオブジェクトビューで見るだけでも、球体を全て消した後もSphereクラスのインスタンスが減らずにそのまま残っているのがリークの原因ということはすぐ分かります。しかし実際のアプリケーションではもっとクラス数は多くなりますし、Flexプロジェクトの場合はFlex SDKに含まれるクラスが無数に生成されるので、ライブオブジェクトビューを一見してメモリリークの原因クラスを発見するのは難しいかもしれません。

 このような場合、まずはアプリケーション上でどのような操作を行うとメモリリークを起こすのかを特定します。このサンプルであれば、「ステージをクリックで球体を作成」-「球体をクリックで球体を削除」という操作がこれに当たります。

メモリリークしているクラスを特定する

 それでは、プロファイラをいったん終了して、もう一度プロファイルを開始します。このサンプルでは、「ステージをクリックで球体を作成」-「球体をクリックで球体を削除」という操作でメモリリークを起こすことが分かっているので、この操作を行う前と後で、クラスのインスタンスがどのように変化するかを調べれば、メモリリークの原因となっているクラスを特定できるはずです。

 まず、メモリリーク前のメモリのスナップショットをキャプチャします。次に、サンプルアプリケーションを操作して、球体の作成と削除を何度か繰り返します。メモリ使用量が増えてきたのを確認したら、ガベージコレクタを実行します。これで、どこからも参照されていないオブジェクトは消去されました。最後にメモリリーク後のメモリのスナップショットをキャプチャして、プロファイルを終了します。

キャプチャされたメモリのスナップショット
キャプチャされたメモリのスナップショット

 この2つのスナップショットをCtrl+クリックにて両方選択し、[不明なオブジェクトを検索]ボタン(アイコン7)をクリックすると、不明なオブジェクトビューが表示されます。このビューには、選択された2つのスナップショット間でインスタンス数が増えたクラスがリストされています。リークの原因となっているクラスの内容によっては非常に多くのクラスが表示されることもありますが、この中から怪しいクラスを探します。今回のサンプルでは、ここにリストされているクラスは、Class/Object/Functionを除くと、いずれもSphereクラス自身またはそのメンバであると思われるため、メモリリークしているクラスはSphereクラスであることが分かります。

不明なオブジェクトビュー
不明なオブジェクトビュー

次のページ
おわりに

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

石上 慎太郎(イシガミ シンタロウ)

クラスメソッド株式会社(http://classmethod.jp)所属ソフトウェアエンジニア。 主にAdobe Flash Platformの各種技術を用いたユーザーインターフェイス設計/実装を担当している。 学生時代よりFlashをこよなく愛すプログラマー。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/6208 2011/10/13 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー