2011-01-23 14 views
23

Qual è la differenza tra l'utilizzo di mach_absolute_time e il semplice metodo NSDate spiegato dall'aquila reale in basso?Codice per misurare il tempo di esecuzione ESATTO all'interno del codice su iPad o telefono?

Ecco un'ottima spiegazione utilizzando l'approccio mach ...

How do I accurately time how long it takes to call a function on the iPhone?

e

Measure time between library call and callback

+0

possibile duplicato di [Come faccio a calcolare con precisione il tempo necessario per chiamare una funzione su iPhone?] (http://stackoverflow.com/questions/646815/how-do-i-sur-at-time-how-long-it- take-to-call-a-function-on-the-iphone) –

risposta

76
loop 
    { 
    NSDate *start = [NSDate date]; 

    // a considerable amount of difficult processing here 
    // a considerable amount of difficult processing here 
    // a considerable amount of difficult processing here 

    NSDate *methodFinish = [NSDate date]; 
    NSTimeInterval executionTime = [methodFinish timeIntervalSinceDate:start]; 

    NSLog(@"Execution Time: %f", executionTime); 
    } 

dovrebbe funzionare.

+0

La risposta ha risolto il tuo problema? –

+11

Ok, gli sviluppatori di iPhone, tutti fanno una pausa caffè. – Will

2

Su answear precedente ho implementato una semplice classe per misurare il tempo

Come funziona:

ABTimeCounter *timer = [ABTimeCounter new]; 
[timer restart]; 

//do some calculations 

[timer pause]; 

//do some other staff 

[timer resume]; 

//other code 

//You can measure current time immediately 

NSLog(@"Time left from starting calculations: %f seconds",[timer measuredTime]); 

[timer pause]; 

il file .h dovrebbe essere simile a questo:

@interface ABTimeCounter : NSObject 
@property (nonatomic, readonly) NSTimeInterval measuredTime; 

- (void)restart; 
- (void)pause; 
- (void)resume; 

@end 

di file .m :

@interface ABTimeCounter() 
@property (nonatomic, strong) NSDate *lastStartDate; 
@property (nonatomic) BOOL isCounting; 
@property (nonatomic, readwrite) NSTimeInterval accumulatedTime; 
@end 

@implementation ABTimeMeasure 

#pragma mark properties overload 

- (NSTimeInterval) measuredTime 
{ 
    return self.accumulatedTime + [self p_timeSinceLastStart]; 
} 

#pragma mark - public - 

- (void) restart 
{ 
    self.accumulatedTime = 0; 
    self.lastStartDate = [NSDate date]; 
    self.isCounting = YES; 
} 

- (void) pause 
{ 
    if (self.isCounting){ 
     self.accumulatedTime += [self p_timeSinceLastStart]; 
     self.lastStartDate = nil; 
     self.isCounting = NO; 
    } 
} 

- (void) resume 
{ 
    if (!self.isCounting){ 
     self.lastStartDate = [NSDate date]; 
     self.isCounting = YES; 
    } 
} 

#pragma mark - private - 

- (NSTimeInterval) p_timeSinceLastStart 
{ 
    if (self.isCounting){ 
     return [[NSDate date] timeIntervalSinceDate:self.lastStartDate]; 
    } 
    else return 0; 
} 

@end 
+0

Non reinventare la ruota. Downvoted. – Maq

+0

@ Maq, potresti fornire ulteriori dettagli per il tuo commento? –

Problemi correlati