1

「 Time Profiler」と「CPU Monitor 」を使用して iPhone 4 でアプリのプロファイルを作成し、その意味を理解しようとしました。

実行時間が 8 分だとすると、CPU の「実行時間」は約 2 分です。その約 67% はメイン スレッド上にあり、そのうち 52% は「独自のコード」からのものです。

今では、配列 (および関連する作業) の列挙、UIKit 操作などに多くの時間が費やされていることがわかります。

問題は、このデータから意味のある結論を引き出すにはどうすればよいかということです。つまり、修正が必要な問題が発生しています。

アプリの性質を考えると、その実行時間 (中央値は 70%) で多くの CPU 負荷がかかっていることがわかります。

そうは言っても、際立っているものがあります。メイン スレッドで HTTP 応答を解析し、熱心にオブジェクトを作成します (メモリ プロファイリングによってもバックアップされます)。

ただし、ここで私が探しているのは、問題のあるコードと、CPU の実行時間のみに基づく有用な結論です。つまり、ここで「多くの」時間を費やしています。

ここに画像の説明を入力

アップデート

より良いイメージを与えるために、詳しく説明してみましょう。

このアプリの機能要件に基づいて、iPhone 3G で実行できない理由がわかりません。CPU 使用率の中央値が約 70% で、ピークが 97% であることは、iPhone 4 では危険信号のようにしか見えません。

これに対する最も明白な対応は、コードを調査し、そこから結論を導き出すことです。

私が望んでいるのは、次の形式の断定的な答えです

  1. 時間の 25% ~ 50% を CA に費やしている場合、アニメーションに問題があります。
  2. UIKitに関連するものに1000ミリ秒を費やす場合は、処理を確認してください

繰り返しになりますが、実行時間と CPU 使用率に関しては、問題が発生していることを示すだけの答えはないかもしれません。

4

3 に答える 3

0

「ここで修正が必要な問題が発生していますか?」という質問に対する答えは簡単です。アプリケーションの使用中に問題が発生しましたか? はいの場合 (アニメーションに不具合が見られるか、アプリがしばらくハングする)、おそらく修正する必要があります。そうでない場合は、時期尚早の最適化を探している可能性があります。
それにもかかわらず、メイン スレッドで http 応答を解析することは、悪い考えかもしれません。

于 2013-11-12T18:02:12.807 に答える
0

8分?

ブッシュを叩くのではなく、アプリケーションをより高速にしたいと思いますよね?

CPU 負荷を調べて、それが適切な量かどうか疑問に思うことは忘れてください。それが HTTP 解析であるかどうかを推測するのは忘れてください。そうかもしれませんが、推測ではわかりません。問題が見つかることを期待して、コードのタイミングを調べたりするのは忘れてください。

なぜそんなに多くの時間を費やしているのかを直接知ることができます。 これが私が使用する方法で あり、これが(アマチュアの)ビデオです。

それをするとこうなる。最初に、あなたが推測したことのない何かを見つけます。それを修正すると、その 8 分から、おそらく 6 分までの大きなチャンクが切り落とされます。それからもう一度やり直して、別の大きな塊を切り取ります。修正するものが見つからなくなるまで繰り返すと、8 分よりもはるかに速くなります。

OK、ボールはあなたのコートにあります。

于 2013-11-13T00:15:58.127 に答える
0

開発者のプレゼンテーションで、Apple は、CPU 使用率はシミュレーターでは正確な指標ではありませんが、デバイスでプロファイリングするときに在庫を保持するものであると指摘しています。個人的には、正当な理由もなくかなりの CPU 時間を消費するスレッドは、解決する必要がある問題だと考えています。時間の浪費を見つけ、パーセンテージで優先順位を付け、それらの処理を開始します。これらは今は目に見える問題ではないかもしれませんが、アプリやデバイスのユーザー エクスペリエンスを低下させる可能性があります。

いくつかの便利なヒントについては、CPU プロファイリングを効果的に使用する方法に関するドキュメントを確認してください。

配列の列挙に多くの時間がかかる場合は、辞書またはその他のより効果的なキャッシュが適切である可能性があることをお勧めします。ただし、CPU を軽減するためにメモリを節約できると仮定します。

効果的なアプローチは、すべてのビジネス ロジックをメイン スレッド (任意の) から削除し、アプリと解析/ビジネス ロジックの間に適切な境界層を作成することです。ここから、コードに問題があるのか​​、それとも単にアプリの UI 自体の重要な要件なのかをより適切に判断できるいくつかのテスト スイートをフックすることができます...

于 2013-11-12T20:45:41.193 に答える