iPhone で 1 回だけ実行されるコードのパフォーマンスを測定したいので、Instrument の CPU サンプラー ツールは、十分なサンプルを収集するために何度も反復する必要があるため、使用が制限されます。
各呼び出しで各関数を使用できるツールはありますか? それは統計的サンプリングの代わりにトレースを呼び出しますか?
よろしく、ヨッヘン
iPhone で 1 回だけ実行されるコードのパフォーマンスを測定したいので、Instrument の CPU サンプラー ツールは、十分なサンプルを収集するために何度も反復する必要があるため、使用が制限されます。
各呼び出しで各関数を使用できるツールはありますか? それは統計的サンプリングの代わりにトレースを呼び出しますか?
よろしく、ヨッヘン
「iPhone アプリ用の非サンプリング時間プロファイリング ツールはありますか?」という質問。あなたが求めているものに似ています。そこでの私の回答では、関数呼び出しベースのプロファイリングを実行できる DTrace を指摘していますが、残念ながら、実際のデバイスではなく、シミュレータでのみ機能します。Shark を使用して、十分に小さいサンプリング間隔でデータを収集することもできます。
最後に、次のようなコードを使用して、アプリケーション内でコード実行のタイミングを設定できます。
CFAbsoluteTime elapsedTime, startTime = CFAbsoluteTimeGetCurrent();
// Your code here
elapsedTime = CFAbsoluteTimeGetCurrent() - startTime;
NSLog(@"Elapsed time in seconds: %f", elapsedTime);
一度呼び出されると許容できないほど実行される大きなコードブロックがある場合、時間のかかるループが含まれているか、非効率的な低レベル関数が呼び出される可能性が非常に高くなります。ループ制御構造は検査によって簡単に見つけられるはずであり、非効率的な下位レベルの関数を見つけることは、CGAbsoluteTimeGetCurrent()と「バイナリデバッグ検索」(ブロックの前半のボトルネックまたは第2?第1四半期または第2四半期?など)
そのタイプの検索でホットスポットが見つからない場合は、パフォーマンスの面で問題がなく、パフォーマンスを向上させるには、アプローチを再考する必要があることを示しています。
面白くするつもりはありませんが、よろしいですか?コードが1回だけ実行される場合、その相対的なパフォーマンスは、エンドユーザーにとって価値のあるものよりも好奇心の問題である可能性があります。
介在することで実行できます。これは、メッセージをトレースするためにどのように実行できるかを示す記事です。おそらく、メッセージの実行のタイミングで適応させることができます。
Pulse エンジニアリング チームは最近、Objective-c コードの 1 行 (またはそれ以上) のパフォーマンスを測定する方法に関する記事を公開しました: http://eng.pulse.me/line-by-line-speed-analysis-for-ios -アプリ/