2009-05-21 10 views
5

Dans un iPhone OS, combien de NSTimers en cours d'exécution seraient trop nombreux? J'ai un tas de routines qui sont appelées par une seule minuterie tirant 25 fois par seconde, et les choses sont plutôt agitées, lentes et lourdes. Je pense à ajouter un ou plusieurs NSTimers supplémentaires pour répartir un peu la charge de travail, mais je suis préoccupé par le nombre d'utilisateurs autorisés à utiliser. Cela peut dépendre quelque peu du taux d'allumage de chaque minuteur individuel que je réalise, alors supposons un taux d'allumage de 20 à 30 fois par seconde. Alors, combien de NSTimers est trop?Combien de NSTimers est trop?

Répondre

5

En interne, NSTimers sont toutes implémentées sur un seul temporisateur matériel. Le système d'exploitation conserve une liste centrale de minuteurs pour toutes les applications en cours d'exécution et planifie simplement un minuteur matériel unique pour l'événement le plus proche. L'ajout de temporisations ne modifie pas le comportement de votre application. Cela dit, de la même manière que l'ajout d'un thread à une application de processus essentiellement unique facilite la gestion de l'exécution, l'ajout de temporisateurs peut vous aider à partitionner votre problème. Étant donné les temps que vous citez, je suppose que cette minuterie est la synchronisation frameupdate pour un jeu ou quelque chose de similaire. Je suggère deux choses:

  1. diviser votre code de dessin courant dans un thread séparé et exécutez votre (même) le code de minuterie qui. Cela devrait vous donner plus de contrôle.

  2. Examinez votre code pour voir la quantité de traitement effectuée dans chacun de ces emplacements 1/25s - il se peut que vous ayez besoin d'optimiser votre code (et c'est probablement le cas).

1

1 dans votre cas. L'ajout d'une minuterie supplémentaire ne rend pas votre application plus rapide.

Vous devez rendre votre code plus efficace ou déclencher la minuterie moins souvent.

Je ne connais pas le temps de fonctionnement d'une minuterie, mais il pourrait être considérable avec un taux de feu aussi élevé. Les minuteries ne sont pas faites pour cela, je suggère un fil comme une alternative.

2

Il semble que le nombre de minuteurs ne soit pas un problème. Le surcoût de NSTimers est fondamentalement sans conséquence par rapport au chargement que vous faites dans votre "tas de routines". Ne t'en fais pas pour l'instant. Utilisez autant de minuteurs que nécessaire. Après cela, ouvrez les requins/instruments et voyez quelles méthodes vous passez le plus de temps.