2009-05-21 6 views
5

В устройстве iPhone OS, сколько одновременно работающих NSTimers было бы слишком много? У меня есть куча процедур, вызываемых одним таймером, стреляющим 25 раз в секунду, и все довольно прерывисто, медленно и тяжело. Я думаю о том, чтобы добавить один или несколько дополнительных NSTimers, чтобы немного распределить рабочую нагрузку, но я обеспокоен тем, сколько из них будет в порядке. Это может зависеть от скорости стрельбы каждого индивидуального таймера, который я реализую, поэтому давайте предположим, что скорость стрельбы 20-30 раз в секунду. Итак, сколько NSTimers слишком много?Сколько NSTimers слишком много?

ответ

5

Внутренние, NSTimers все реализованы на одном аппаратном таймере. ОС хранит центральный список таймеров для всех запущенных приложений и просто планирует один аппаратный таймер для скорейшего события.

Добавление таймеров не изменяет поведение вашего приложения. Тем не менее, добавление потока в практически однопроцессное приложение упрощает управление временем выполнения, добавление таймеров может помочь вам разделить вашу проблему.

Учитывая время, которое вы цитируете, я предполагаю, что этот таймер является синхронизацией кадров для игры или чего-то подобного. Я бы посоветовал пару вещей:

  1. Разделите свой текущий код чертежа на отдельный поток и запустите в нем тот же самый код таймера. Это должно дать вам больше контроля.

  2. Профилируйте свой код, чтобы узнать, сколько обработки выполняется в каждом из этих слотов 1/25s. Возможно, это (и, вероятно,), что вам просто нужно оптимизировать ваш код.

1

1 в вашем случае. Добавление дополнительного таймера не ускоряет работу приложения.

Вы должны сделать свой код более эффективным или запустить таймер реже.

Я не знаю о накладных расходах таймера, но он может быть значительным с высокой скоростью огня. Таймеры не созданы для этого, я предлагаю нить в качестве альтернативы.

2

Похоже, что количество таймеров не является проблемой. Накладные расходы NSTimers в основном несущественны по сравнению с загрузкой, которую вы выполняете в своей «группе процедур». На этот вопрос не беспокойтесь. Используйте столько таймеров, сколько вам нужно. После этого откройте акулу/инструменты и посмотрите, на какие методы вы проводите больше всего времени.

Смежные вопросы