Xcode5のデバッグ機能を使ってCPUとスレッドを調べよう
最近、アプリを開発する上で、その操作がどのくらいCPUを消費するのか, マルチスレッドを有効に使えているのかを厳しく見る必要が出てきました。それまでCPUやスレッドもそこまで気にしたことはなかったのですが、Xcode5からはInstrumentを起動しなくとも、簡易的に確認できるということで試しにやってみました。
Xcode5でDebug gaugesを使ってみる
まずは、本当に簡単な何もしない画面を作成して、様子を見てみました。
4つスレッドがあります。そして、画面の描画に使われているであろうスレッドがThread1であることがわかると思います。他は全く使ってないですね。
また、本試験ではiPhone5(iOS7.1)を利用しているため、マルチコアなので、CPUのメータが最大200%であることが示されています。
しばらく見ていると、4つあったスレッドが2つに減ります。
続いて、for分で10000回ループしてひたすらログを出力するボタンを作成して、様子を見てみました。
さて、スレッドを別に作成して実行してみましょう。
1 2 3 4 5 6 7 |
|
その結果が下図。
これを見るとメインスレッドとは別のスレッドで実行されていることがわかります。基本的に描画はメインスレッドでしか実行がされないので、その他の処理はメインスレッドとは別スレッドで行うのが良さそうですね。
実際にやってみましょう。
1 2 3 4 5 6 7 8 9 10 |
|
メインスレッドと別スレッドで各10000回ログを出力する処理を実行しているため、同じ時間帯にリソースを使っていることがわかりますね。
マップを描画してDebug gaugesを見てみる
アプリを開発するときにマップを利用すると様々な操作でメインスレッドを利用していることがわかります。まずはマップを起動してみましょう。
起動直後から大量のスレッドが作成されていることがわかります。描画はメインスレッドでやるものの、様々な計算は別スレッドでやっているということなんでしょうか…。
起動してからしばらく放置しておくとスレッドがどんどん減っていきます。
しかし、マップを拡大・縮小するとスレッドが大量に作成されます。また、CPUも激しく消費することがわかります。(余裕で140〜150%まで上がったりしますね…)
これらはユーザの操作によって引き起こされる現象なので、極端な話、触らなければCPUの消費はされません。
では、下記のようにしてみたらどうなるでしょうか?
1 2 3 4 |
|
ユーザの動きを検知して自動で回転するので、CPUを使い続けます。
まとめ
アプリを開発する上で、端末のリソースをどのようにうまく使っていくのかは非常に重要です。マップを使うアプリを作成するときは特に注意が必要ですね。