2009-05-21 8 views
5

En un dispositivo con sistema operativo para iPhone, ¿cuántos NSTimers ejecutados simultáneamente serían demasiados? Tengo un montón de rutinas llamadas por un solo temporizador que dispara 25 veces por segundo, y las cosas son bastante agitadas, lentas y pesadas. Estoy pensando en agregar uno o más NSTimers adicionales para distribuir la carga de trabajo un poco, pero estoy preocupado acerca de cuántos estaría bien usar. Esto puede depender en cierta medida de la velocidad de disparo de cada temporizador individual que conozco, así que supongamos una velocidad de disparo de 20 ~ 30 veces por segundo. Entonces, ¿cuántos NSTimers son demasiados?¿Cuántas NSTimers son demasiadas?

Respuesta

5

Internamente, NSTimers están implementados en un solo temporizador de hardware. El sistema operativo mantiene una lista central de temporizadores para todas las aplicaciones en ejecución y simplemente programa un solo temporizador de hardware para el evento más cercano.

Agregar temporizadores no cambia el comportamiento de su aplicación. Dicho esto, de la misma manera que agregar subprocesos a una aplicación de proceso esencialmente única facilita la administración del tiempo de ejecución, agregar temporizadores puede ayudarlo a dividir su problema.

Dado el tiempo que citas, supongo que este temporizador es la sincronización frameupdate para un juego o algo similar. Sugeriría un par de cosas:

  1. Dividir el código de dibujo actual en una secuencia separada y ejecutar el (mismo) código del temporizador en ese. Esto debería darte más control.

  2. Perfile su código para ver cuánto procesamiento se realiza en cada una de esas ranuras de 1/25s; puede ser (y probablemente lo sea) que simplemente necesite optimizar su código.

1

1 en su caja. Agregar un temporizador adicional no hace que su aplicación se ejecute más rápido.

Tienes que hacer que tu código sea más eficiente o disparar el temporizador con menos frecuencia.

No sé sobre la sobrecarga de un temporizador, pero podría ser considerable con un índice de fuego tan alto. Los temporizadores no están hechos para esto, sugiero un hilo como alternativa.

2

Parece que el número de temporizadores no es un problema. La sobrecarga de NSTimers es básicamente intrascendente en comparación con la carga que estás haciendo en tu "montón de rutinas". No te preocupes por eso por ahora. Use tantos temporizadores como necesite. Después de eso, abre tiburones/instrumentos y mira en qué métodos pasas más tiempo.

Cuestiones relacionadas