web-dev-qa-db-ja.com

Instrumentsでメモリ使用量とパフォーマンスをプロファイルするにはどうすればよいですか?

すべてのInstruments Trace Templatesのうち、私は以下を使用するのが大好きです。

  • オブジェクトが過剰にリリースされている場所を検出するゾンビ、デバッグに最適EXEC_BAD_ACCESSエラー。
  • メモリリークを検出するためのリーク。
  • コアアニメーションwカラーブレンドレイヤーにより、フレームレートと半透明のサブビューを検出し、UITableViewスクロールのスムーズ化に最適です。

私はいつも私のアプリのメモリ使用量とパフォーマンスをプロファイルするようにと言う人々の声を聞きます。

  1. メモリ使用量とパフォーマンスをプロファイルする必要があるのはなぜですか?私のアプリは正常に動作します。
  2. どうすればいいのですか?

Allocationsを使用しましたが、iPhoneアプリは合計1 MBの割り当てられたメモリで開始し、通常の使用後に5 MBに成長することがわかりました。 iPhoneのメモリ使用量が多すぎますか? iPad?マック?

52
ma11hew28

理由を答えるために、iPhoneとiPadはMacよりもはるかに少ないRAMです。iPhone4は512 MBのRAMを持ちますが、以前のバージョンは256または128でした。 MB。RAM OSが使用し、マルチタスクを実行し、アプリに多くのRAMを浪費する要素がないため、アプリが使用するメモリ。

パフォーマンスのプロファイリングは、アプリの実行が遅いときに通常行うことです。プロファイルを作成してコード内のスロースポットを見つけ、コードをより速く実行できるようにします。アプリが正常に動作する場合、パフォーマンスをプロファイルする必要はほとんどありません。

その方法に答えるには、割り当てツールを使用してメモリ使用量を測定します。 [すべての割り当て]カテゴリの[ライブバイト]列は、アプリが現在使用しているメモリの量を示します。 Allocationsインストゥルメントのヒープショット分析は、アプリのメモリの増加を測定します。ジャンプバーの左側にあるメニューを使用して、ヒープショット分析を行います。

Time Profilerインストゥルメントは、パフォーマンスのためにアプリのプロファイルを作成します。 Time Profiler機器を使用することの難しい部分は、結果を解釈することです。 Time Profilerインストゥルメントは、アプリが関数Xでその時間の75%を費やしていることを通知しません。コード内のスロースポットを見つけるには、データを掘り下げる必要があります。

許容メモリ使用量に関しては、サポートするデバイスとアプリによって異なります。 100 MBのRAMを使用するXcodeのようなアプリは問題ありませんが、1ページのドキュメントに100 MBを使用するTextEditのようなアプリは問題になります。5MBは問題になりませんiOSアプリ。

76
Mark Szymczyk

マークの答えのコメントのいくつかに対処するには:

ライブバイトの割り当てには、CALayer/UIViewsによって使用されるOpenGLテクスチャメモリは含まれません。これは、メモリモニタとの不一致の原因です。

この質問に対する答えはこちらをご覧ください: iPhoneのメモリ消費量を理解する

7
Calvin

デバイスの物理メモリに実際にロードされるメモリは、Resident Memory内のVM Tracker Instrumentです。

Allocation Instrumentは、malloc/[NSObject alloc]といくつかのフレームワークバッファーによって作成されたメモリのみをマークします。たとえば、解凍された画像ビットマップはAllocation Instrumentに含まれませんが、常にほとんどのメモリを使用します。

Appleから情報を取得するには、WWDC 2012セッション242 iOSアプリのパフォーマンス:メモリをご覧ください。

3
CarmeloS