2012-04-18 13 views
6

tengo el siguiente código que está teniendo un tiempo de proceso:¿Cómo puedo medir el tiempo que lleva entre dos líneas de código en Objective-C para iOS?

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

¿Hay alguna manera, en instrumentos o en otro lugar, que pueda medir el tiempo que se tarda en ir desde la primera línea de código para la segunda línea de código ... en tics o milisegundos o algo así?

Quiero hacer algunos ajustes, pero tengo que poder medir para ver si estoy haciendo una mejora con respecto al código anterior.

Gracias.

Respuesta

6

más rápida, más sucio, forma posiblemente no muy preciso

NSDate *startDate = [NSDate date]; 

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

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

Un poco más complicado, pero probablemente la solución más útil, si se está haciendo un poco de generación de perfiles básicos se puede ver here, se utiliza una función C que ejecuta una bloque que proporcionas


gran nota al margen

Como Justin señala el acto mismo de la creación de un NSDate y luego ingresar a cabo introducirá la interferencia a sus medidas y lo que esta técnica sólo es realmente bueno para conseguir figuras del estadio de béisbol e incluso entonces probablemente deberías ejecutar grandes cantidades de iteraciones de tu código dentro del bloque de tiempo. Si necesita medidas precisas, salte a la respuesta de Justin

+0

@Justin Por lo general, solo utilizo esto con el código de destino siendo repetido un gran número de veces (por ejemplo, seguiré aumentando las iteraciones hasta que obtenga algo que muestre una diferencia medible) y solo quiero figuras de ballpark. –

+0

* EDITAR más allá del límite de tiempo: se leerá como la publicación superior *: esto es relativamente lento e inexacto. para muchas aplicaciones, esto es demasiada interferencia. – justin

+0

bueno para aclarar que – justin

6

Sí. Utilizaría la muestra de instrumentos para esto.

ejecutar la aplicación, el programa de ejercicio durante un tiempo, a continuación, busque el símbolo de instrumentos que contiene:

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

Se debe mostrar la línea pesos por línea. También tenga en cuenta que Instruments le permite especificar la frecuencia de muestreo, hasta 40 microsegundos.

2

me gustaría utilizar el siguiente código:

NSTimeInterval start = CACurrentMediaTime(); 

// your code goes here 

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

Es mucho más preciso que NSDate.

+0

¿No es necesario que el código esté entre el inicio y el final? – s1m0n

+1

Epic fail. Editado –

Cuestiones relacionadas