2012-04-18 8 views
6

私はプロセスに時間がかかっている次のコードを持っている:iOSのObjective-Cで2行のコード間にかかる時間を測定するにはどうすればよいですか?

self.itemsArray = [Helper changeTheA:self.itemsArray]; 
self.itemsArray = [Helper convertDates:self.itemsArray]; 

は方法は、私は時間を測定することができ、楽器やどこか、そこですがにコードの最初の行から行くのにかかります2番目のコード行は...ティックまたはミリ秒か何かで?

私はいくつか微調整したいと思いますが、前のコードより改善しているかどうかを判断するために測定できる必要があります。

ありがとうございました。

答えて

6

、あなたはいくつかの基本的なプロファイリングを行っている場合はhereを見ることができます

NSDate *startDate = [NSDate date]; 

self.itemsArray = [Helper changeTheA:self.itemsArray]; 

NSLog(@"changeTheA time taken: %f", -[startDate timeIntervalSinceNow]); 

Aもう少し関与が、おそらくより便利なソリューション最速、汚い、おそらく非常に正確ではないにせよ、それは実行C関数を使用していますあなたが提供するブロック。


ビッグサイドノート

ジャスティンは、あなたの測定への干渉を紹介します、それをログアウトので、この技術はだけは本当にボールパークの数字を取得するための任意の良いですその後、NSDateを作成し、実際の行為を指摘するようにそれでも時間ブロック内で大量のコードを繰り返し実行する必要があります。正確な測定が必要な場合は、ジャスティンの答えにスキップしてください。

+0

@Justin私は一般的に、ターゲットコードを何回もループさせて使用しています(例えば、測定可能な差異を表示するまで繰り返します)。ボールパークの数字だけが必要です。 –

+0

*期限を超えて編集する - トップポストのように読む*:これは比較的遅く、不正確です。多くのアプリケーションでは、干渉が大きすぎます。 – justin

+0

それを明確にすることは良い – justin

6

はい。このためにインスツルメントサンプラーを使用します。

self.itemsArray = [Helper changeTheA:self.itemsArray]; 
self.itemsArray = [Helper convertDates:self.itemsArray]; 

それはラインによって重みラインを表示する必要があります:

は、含まれている楽器でシンボルを見つけ、しばらくの間、プログラムを行使し、アプリを実行します。また、Instrumentsでは、サンプリング周波数を40マイクロ秒まで指定できます。

2

私は、次のコードを使用します。それはNSDateより多くの、より正確である

NSTimeInterval start = CACurrentMediaTime(); 

// your code goes here 

NSTimeInterval end = CACurrentMediaTime(); 
NSTimeInterval delta = end - start; 
NSLog(@"Execution took %f seconds.", delta); 

を。

+0

コードは開始と終了の間にある必要はありませんか? – s1m0n

+1

エピックが失敗します。編集されました。 –

関連する問題