Сколько NSTimers слишком много? - PullRequest
5 голосов
/ 21 мая 2009

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

Ответы [ 3 ]

5 голосов
/ 21 мая 2009

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

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

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

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

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

2 голосов
/ 21 мая 2009

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

1 голос
/ 21 мая 2009

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

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

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

...