Uso de CPU y memory de una llamada de método en iPhone

Estoy tratando de agregar algunas statistics de performance a una llamada de método para mi aplicación de iPhone. Utilicé lo siguiente para encontrar el time para procesar:

#define TICK NSDate *startTime = [NSDate date] #define TOCK NSLog(@"Time to process: %f", -[startTime timeIntervalSinceNow]) 

¿Existen estrategias similares para medir el uso de CPU y memory de una llamada de método?

Tendrás que hacer un poco de trabajo para que esto funcione, pero así es como puedes hacerlo.

  • A partir de esta respuesta SO, puede aprender cómo get el uso actual de la CPU.
  • A partir de esta respuesta SO, puede aprender cómo get el uso de memory actual.

Ahora puede generar un nuevo hilo que comtesting la CPU y la memory de forma periódica o bajo demanda, luego cree una class, algo así:

 @interface ProfilerBlock -(id) init; -(void) end; @end 
  • El método init debe inicializar la hora actual y registrar la instancia de ProfilerBlock para get información del hilo de trabajo sobre el uso de la memory y el uso de la CPU.
  • El método final debería calcular la hora e imprimir toda la información necesaria o escribirla en un file o algo así 🙂

Ahora cree una function de liberación de estilo C para la class ProfilerBlock

 static void __$_Profiler_Block_Release_Object_$__(ProfilerBlock **obj) // the long name is just to prevent duplicated symbol names // { [(*obj) end]; [(*obj) release]; (*obj) = nil; } 

Finalmente puedes crear macros para hacer tu vida más fácil:

 #define CONCAT2(x, y) x ## y #define CONCAT(x, y) CONCAT2(x, y) #define PROFILER_SCOPE_OBJECT __attribute__((cleanup(__$_Profiler_Block_Release_Object_$__))) #define PROFILE_BLOCK ProfilerBlock *CONCAT(__profilerBlock_, __LINE__) PROFILER_SCOPE_OBJECT = [[ProfilerBlock alloc] init]; 

Una vez que tenga todo esto, puede perfilar methods como este:

 -(void) methodToProfile { PROFILE_BLOCK // add some code to profile here // // the "end" function will get called automatically after the method is done, even if you return early, allowing you to process the profiled data // } 

Espero que esto ayude, lo siento si no analice en detalle cómo medir la memory y la CPU, pero creo que está bien cubierto en las otras respuestas.

Use Instruments para verificar el performance de su aplicación. Apple ha hecho un trabajo bastante decente, así que no hay necesidad de redevise la rueda.

Use Instruments para tomar estas medidas en el uso de la vida real en un dispositivo de la vida real.

  NSTimeInterval t1 = [[NSDate date] timeIntervalSince1970]; 

…. processs personalizados …

  NSTimeInterval t2 = [[NSDate date] timeIntervalSince1970]; NSTimeInterval dt = t2-t1; this is in milisec;