2012-04-18 10 views
6

Ho il seguente codice che sta prendendo un po 'per processo:Come posso misurare il tempo necessario tra due linee di codice in Objective-C per iOS?

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

C'è un modo, in strumenti o da qualche altra parte, che posso misurare il tempo è necessario per passare dalla prima riga di codice per la seconda riga di codice .... in zecche o millisecondi o qualcosa del genere?

Voglio fare qualche ritocco ma devo essere in grado di misurare per vedere se sto facendo un miglioramento rispetto al codice precedente.

Grazie.

risposta

6

più veloce, più sporco, così forse non molto preciso

NSDate *startDate = [NSDate date]; 

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

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

Un po 'più coinvolti, ma probabilmente la soluzione più utile, se si sta facendo un po' di profilazione di base può essere visto here, utilizza una funzione C che esegue un blocco che fornisci.


Big nota a margine

Come Justin sottolinea il vero e proprio atto di creare un NSDate e poi la registrazione fuori introdurrà interferenze le vostre misure e così questa tecnica è veramente solo un bene per ottenere figure parco palla e anche allora probabilmente dovresti eseguire grandi quantità di iterazioni del tuo codice all'interno del blocco temporale. Se hai bisogno di misure accurate, passa alla risposta di Justin

+0

@Justin In genere utilizzo solo questo con il codice di destinazione in loop un numero elevato di volte (ad esempio, continuerò ad aumentare le iterazioni fino a quando otterrò qualcosa che mostrerà una differenza misurabile) e voglio solo le cifre del parco giochi. –

+0

* EDIT oltre il limite di tempo - sarà letto come top-post *: questo è relativamente lento e impreciso. per molte applicazioni questa è troppa interferenza. – justin

+0

buono per chiarire che – justin

6

Sì. Dovresti usare il Sampler degli strumenti per questo.

eseguire l'applicazione, esercitare il programma per un po ', quindi individuare il simbolo in Strumenti quali contiene:

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

dovrebbe mostrare la linea pesi per riga. Si noti inoltre che Instruments consente di specificare la frequenza di campionamento, fino a 40 microsecondi.

2

vorrei utilizzare il seguente codice:

NSTimeInterval start = CACurrentMediaTime(); 

// your code goes here 

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

E 'molto più preciso di NSDate.

+0

Il codice non deve essere compreso tra inizio e fine? – s1m0n

+1

Errore epico. Modificato. –

Problemi correlati