2012-02-18 2 views
2

Я пытаюсь увидеть, где мои дорогие запросы и хотят измерить, если это запрос, это узкое место или что-то еще. А также измерьте, если некоторые запросы быстрее, чем другие в нашем приложении. Мне было интересно, как я могу это сделать с помощью инструментов. Я вижу, что есть инструмент профилирования времени, и мне было интересно, могу ли я использовать это.Измерьте время запроса IPad

Я попытался запустить Time Profiler, нажав кнопку, которая представляет мой viewController, который обращается к базе данных. Я не вижу свой собственный вызов sql и задаюсь вопросом, как лучше всего измерить время, которое метод принимает от начала до конца. Благодарю.

ответ

0

Почему вы не печатаете в консоли время, когда оно начинается и когда оно заканчивается. Я делаю это на многих языках, таких как iOS/Java [Android]/PHP. Для отладки плагинов раз

Я надеюсь, что это помогает

0

Для нахождения различий во времени между вызовами, я обычно использую класс StopWatch, который использует машинное время (по крайней мере миллисекунд, может быть, мкс точность).

Эта версия разработана специально для автореле и объектива-c. Он имеет метод, 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, который возвращает объект autoreleased.

Как только вы позвоните по телефону start, воспользуйтесь методом seconds, чтобы получить истекшее время. Еще раз вызовите start, чтобы перезапустить его. Или stop, чтобы остановить его. Вы все еще можете прочитать время (звонок seconds) в любое время после звонка stop.

Пример в функции (Timing вызова исполнения)

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

    ... do stuff 

    [stopWatch StopWithContext:[NSString stringWithFormat:@"Created %d Records",[records count]]]; 
} 
Смежные вопросы