時間プロファイラは、特定のメソッドに費やされた時間を計測できます。メソッドが呼び出された回数を測定する同様のメソッドがありますか?iPhoneのメソッド呼び出し回数を計測する計測器
0
A
答えて
4
DTraceはこれを行うことができますが、iPhone Simulator(Snow Leopardではサポートされていますが、まだiOSではサポートされていません)でのみ使用できます。私はMacResearch hereとhereにこの技術に関する2つの記事を書いています。ここでは、DTraceを使用して特定のメソッドと呼び出しのケーススタディを調べています。
#pragma D option quiet
#pragma D option aggsortrev
dtrace:::BEGIN
{
printf("Sampling Core Plot methods ... Hit Ctrl-C to end.\n");
starttime = timestamp;
}
objc$target:CP*::entry
{
starttimeformethod[probemod,probefunc] = timestamp;
methodhasenteredatleastonce[probemod,probefunc] = 1;
}
objc$target:CP*::return
/methodhasenteredatleastonce[probemod,probefunc] == 1/
{
this->executiontime = (timestamp - starttimeformethod[probemod,probefunc])/1000;
@overallexecutions[probemod,probefunc] = count();
@overallexecutiontime[probemod,probefunc] = sum(this->executiontime);
@averageexecutiontime[probemod,probefunc] = avg(this->executiontime);
}
dtrace:::END
{
milliseconds = (timestamp - starttime)/1000000;
normalize(@overallexecutiontime, 1000);
printf("Ran for %u ms\n", milliseconds);
printf("%30s %30s %20s %20s %20s\n", "Class", "Method", "Total CPU time (ms)", "Executions", "Average CPU time (us)");
printa("%30s %30s %[email protected] %[email protected] %[email protected]\n", @overallexecutiontime, @overallexecutions, @averageexecutiontime);
}
これが生成します。たとえば、私は倍のメソッドの数を測定するには、次のDTraceスクリプトは、CPの接頭辞を持つクラスで呼び出されるだけでなく、それらのメソッドで費やされた時間を合計して
作成しました次きれいにフォーマットされた出力:
Class Method Total CPU time (ms) Executions Average CPU time (us)
CPLayer -drawInContext: 6995 352 19874
CPPlot -drawInContext: 5312 88 60374
CPScatterPlot -renderAsVectorInContext: 4332 44 98455
CPXYPlotSpace -viewPointForPlotPoint: 3208 4576 701
CPAxis -layoutSublayers 2050 44 46595
CPXYPlotSpace -viewCoordinateForViewLength:linearPlotRange:plotCoordinateValue: 1870 9152
...
コマンドラインからDTraceのスクリプトを作成して実行することができますが、おそらくあなたの最善の策は楽器でカスタム楽器を作成することと、その機器内の適切なDコードを記入します。 Simulatorでアプリケーションに対して簡単に実行できます。
この場合も、デバイスでは機能しませんが、何かが呼び出された回数の統計と、それが実行されている時間の統計だけが必要な場合は、これがジョブを実行する可能性があります。
関連する問題
- 1. 計測器とメモリリーク
- 2. Java計測器のトランスフォーマー
- 3. アクティビティモニタの計測器ios
- 4. 計測器:制御ライフサイクル
- 5. ユニットテストDb4oTool計測器(コレクション)
- 6. Androidスタジオ計測器テストビルドバリアント
- 7. NSPlaceholderString initWithFormat:locale:arguments:Xcode計測器リーク
- 8. 計測器を使用しないコードカバレッジ
- 9. アップル計測器ツールに関するフィードバック
- 10. 計測器(リーク)が動作しない
- 11. iOSリーク計測器の保持カウント
- 12. 計測器Windows 7のBluetoothスタック
- 13. 計測器バーが消えた
- 14. エネルギー使用量計測器 - iOS
- 15. gradleを使用したAndroid計測器テストのコマンドライン引数
- 16. メソッドの行を計測する
- 17. ウェブユーザー計測プロセス
- 18. Xcode(および計測器)からiPhone上でiPhoneアプリケーションを実行する際の問題
- 19. iOS:Xcode計測器からのリークを特定する方法は?
- 20. Androidスタジオで計測器テストをデバッグする方法は?
- 21. UIを計測する
- 22. iPhoneでの実行中のプロセスに計測器を接続できません
- 23. ビルド時間計測とロード時間計測の違い
- 24. アンドロイド計測器テスト実行中にcmdコンソールでログを出力する方法
- 25. xcode 4.2シミュレータで計測器が動作しない
- 26. F#パフォーマンスプロファイラ計測器が動作しない
- 27. ダイナミックバイトコード計測 - 問題
- 28. ネイティブjavaバイトコード計測
- 29. Androidのネイティブドライバapiエラーで計測器コマンドを実行中
- 30. XCode:計測器にスタックトレースがありますか?
Brad Larson - 「あなたの最善の策は、楽器でカスタム楽器を作成し、その楽器内の適切なDコードを入力することです」 - どうすればよいですか?私がしたときに、文法エラーが発生する... – shmim
具体的には、上記のスクリプトを入力すると、私の望む通りになるでしょう:-) – shmim
また、あなたの記事へのリンクは死んでいます... – shmim