2009-05-21 18 views
5

In un dispositivo iPhone OS, quanti NSTimer in esecuzione simultanea sarebbero troppi? Ho un sacco di routine chiamate da un singolo timer che spara 25 volte al secondo, e le cose sono piuttosto mosse, lente e pesanti. Sto pensando di aggiungere uno o più NSTimer extra per distribuire un po 'il carico di lavoro, ma sono preoccupato di quanti potrebbero essere d'accordo. Questo può dipendere un po 'dalla frequenza di fuoco di ogni singolo timer che realizzo, quindi supponiamo una frequenza di sparo di 20 ~ 30 volte al secondo. Quindi, quanti NSTimers sono troppi?Quanti NSTimers sono troppi?

risposta

5

Internamente, NSTimers sono tutti implementati su un singolo timer hardware. Il sistema operativo mantiene un elenco centrale di timer per tutte le app in esecuzione e pianifica semplicemente un timer hardware singolo per il più presto possibile.

L'aggiunta di timer non modifica il comportamento della tua app. Detto questo, nello stesso modo in cui l'aggiunta di thread a un'applicazione di processo essenzialmente singola semplifica la gestione del runtime, l'aggiunta di timer può aiutare a suddividere il problema.

Date le volte che citate, immagino che questo timer sia la sincronizzazione frameupdate per un gioco o qualcosa di simile. Vorrei suggerire un paio di cose:

  1. Dividi il tuo codice di disegno corrente in un thread separato ed esegui il tuo (stesso) codice timer in questo. Questo dovrebbe darti più controllo.

  2. Indica il tuo codice per vedere quanta elaborazione viene eseguita in ciascuno di questi slot 1/25 - potrebbe essere (e probabilmente lo è) che devi semplicemente ottimizzare il tuo codice.

1

1 nel tuo caso. L'aggiunta di un timer aggiuntivo non velocizza l'esecuzione dell'applicazione.

Devi rendere il tuo codice più efficiente o attivare il timer meno spesso.

Non so il sovraccarico di un timer, ma potrebbe essere considerevole con un tasso di incendio così elevato. I timer non sono fatti per questo, suggerisco un thread come alternativa.

2

Sembra che il numero di timer non sia un problema. Il sovraccarico di NSTimers è fondamentalmente irrilevante rispetto al carico che stai facendo nel tuo "gruppo di routine". Non ti preoccupare per ora. Usa tutti i timer che ti servono. Dopodiché apri lo squalo/gli strumenti e vedi quali metodi passi più tempo.

Problemi correlati