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
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:
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.
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 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.
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.
- 1. Bloat Feature - combien est trop?
- 2. mysql - combien de colonnes est trop?
- 3. Combien de poignées Windows en cours d'utilisation est "trop nombreuses"?
- 4. Combien de temps pour vous connecter à une application et combien est trop?
- 5. Trop de couches d'indirection, est-ce trop?
- 6. Mise en cache des objets ASP.NET - combien coûte trop?
- 7. Ruby combien de vérification d'erreur est approprié?
- 8. Combien de colonnes sont trop nombreuses pour une table SQL Server 2005?
- 9. Nombre de tableaux compte 1 de trop
- 10. Rails: Combien est la destruction modèle automatisé
- 11. Ma page d'index est-elle trop grande?
- 12. Ma session ASP.NET est-elle trop grande?
- 13. Requêtes SQL - Comment lent est trop lent?
- 14. Mon fichier objet C++ est trop gros
- 15. L'enregistrement est renvoyé - Message vocal trop court
- 16. Mon fichier journal est trop volumineux
- 17. Le framerate animé * .gif est trop élevé
- 18. Google Map InfoWindow est trop large
- 19. Bash == opérateur dans [[]] est trop intelligent!
- 20. MVP - Combien de présentateurs
- 21. CMD: Combien de gauche
- 22. Trop de fichiers ouverts
- 23. Combien de fois le déclencheur dans MySQL est appelé?
- 24. C#: Combien de fois la valeur foreach est appelée?
- 25. mysql trop de colonnes?
- 26. Trop d'exception de threads
- 27. Trop de routes Rails?
- 28. webrequest.begingetresponse prend trop de temps lorsque l'url est invalide
- 29. Combien de bogues sont possibles?
- 30. ASP.NET MVC: Combien de dépôts?