2012-02-18 19 views
2

高価なクエリがどこにあるのかを調べて、それがボトルネックなクエリかどうかを調べようとしています。また、特定のクエリが他のクエリよりもアプリ内で高速であるかどうかを測定します。インストゥルメントでこれをどうやってやれるのだろうかと思っていた。私は時間プロファイラツールがあり、私がこれを使用できるかどうか疑問に思っていた。クエリが実行される時間を測定するiPad

データベースにアクセスする私のviewControllerを表示するボタンをクリックして、Time Profilerを実行しようとしました。私は自分自身のSQL呼び出しを見ていないし、メソッドが最初から最後までどのような時間を測定するための最良の方法が不思議でした。ありがとう。

答えて

0

コンソールで印刷を開始しない理由は、開始時と終了時です。私はiOS/Java [Android]/PHPのように多くの言語でそうしています。回

プラグインをデバッグするために、私はそれが私は通常、(少なくともミリ秒で、多分正確さをマイクロ秒)マシンタイムを使用するストップウォッチクラスを使用して、コール間の時間差を見つけるための

0

に役立ちます願っています。

このバージョンは、自動リリースと目的のために特別に設計されています。それには時間のメッセージも記録する方法、stopWithContext:があります。これは、複数の機能の開始/停止測定に便利です。あなたが適切に見えるようにそれを調整します。

私は必要に応じてC++バージョンも持っています。 [ここではC++のバージョンが見つかります] [1]。

StopWatch.h

#import <Foundation/Foundation.h> 


@interface StopWatch : NSObject 
{ 
    uint64_t _start; 
    uint64_t _stop; 
    uint64_t _elapsed; 
} 

-(void) Start; 
-(void) Stop; 
-(void) StopWithContext:(NSString*) context; 
-(double) seconds; 
-(NSString*) description; 
+(StopWatch*) stopWatch; 
-(StopWatch*) init; 
@end 

StopWatch.m

#import "StopWatch.h" 
#include <mach/mach_time.h> 

@implementation StopWatch 

-(void) Start 
{ 
    _stop = 0; 
    _elapsed = 0; 
    _start = mach_absolute_time(); 
} 
-(void) Stop 
{ 
    _stop = mach_absolute_time(); 
    if(_stop > _start) 
    { 
     _elapsed = _stop - _start; 
    } 
    else 
    { 
     _elapsed = 0; 
    } 
    _start = mach_absolute_time(); 
} 

-(void) StopWithContext:(NSString*) context 
{ 
    _stop = mach_absolute_time(); 
    if(_stop > _start) 
    { 
     _elapsed = _stop - _start; 
    } 
    else 
    { 
     _elapsed = 0; 
    } 
    NSLog([NSString stringWithFormat:@"[%@] Stopped at %f",context,[self seconds]]); 

    _start = mach_absolute_time(); 
} 


-(double) seconds 
{ 
    if(_elapsed > 0) 
    { 
     uint64_t elapsedTimeNano = 0; 

     mach_timebase_info_data_t timeBaseInfo; 
     mach_timebase_info(&timeBaseInfo); 
     elapsedTimeNano = _elapsed * timeBaseInfo.numer/timeBaseInfo.denom; 
     double elapsedSeconds = elapsedTimeNano * 1.0E-9; 
     return elapsedSeconds; 
    } 
    return 0.0; 
} 
-(NSString*) description 
{ 
    return [NSString stringWithFormat:@"%f secs.",[self seconds]]; 
} 
+(StopWatch*) stopWatch 
{ 
    StopWatch* obj = [[[StopWatch alloc] init] autorelease]; 
    return obj; 
} 
-(StopWatch*) init 
{ 
    [super init]; 
    return self; 
} 

@end 

クラスは、自動解放オブジェクトを返す静的stopWatch方法を有しています。

startに電話したら、secondsメソッドを使用して経過時間を取得します。再びstartに電話をかけて再起動してください。またはstopを押して停止します。 stopを呼び出した後も、いつでも時刻を読むことができます(seconds)。機能(実行のタイミング・コール)で

-(void)SomeFunc 
{ 
    StopWatch* stopWatch = [StopWatch stopWatch]; 
    [stopWatch Start]; 

    ... do stuff 

    [stopWatch StopWithContext:[NSString stringWithFormat:@"Created %d Records",[records count]]]; 
} 
関連する問題