iPhone: Какие методы наиболее полезны для более быстрого Bluetooth? - PullRequest
9 голосов
/ 14 июня 2010

Я добавляю одноранговый Bluetooth с помощью GameKit для iPhone-up, так что скорость очень важна.Я отправляю около 40 сообщений в секунду, большинство из них с более быстрым GKSendDataUnreliable, все сериализуются с помощью NSCoding.При тестировании между 3G и 3GS это замедляет 3G намного больше, чем хотелось бы.Мне интересно, где я должен сосредоточить свои усилия, чтобы ускорить его.

Насколько медленнее GKSendDataReliable?Для тех немногих пакетов, у которых есть , будет ли быстрее отправить GKSendDataUnreliable, и одноранговый узел отправит подтверждение, чтобы я мог отправить снова, если я не получу подтверждение в течение, скажем, 100 мс?

Насколько быстрее было бы создать экземпляр NSData, используя обычный массив C, а не архивировать с помощью протокола NSCoding?Является ли этот процесс сериализации (около десятка операций с плавающей запятой) таким же медленным, как и следовало ожидать из-за накладных расходов на создание / освобождение объекта, или происходит что-то особенно медленное?наборы данных намного, намного медленнее, чем отправка одного фрагмента данных в четыре раза больше.Буду ли я существенно экономить, отправляя отдельные пакеты данных, которые не всегда объединяются в одном и том же пакете, когда они происходят в одно и то же время?

Есть ли другие секреты производительности Bluetooth, которые я пропустил?

Спасибо за вашу помощь.

1 Ответ

8 голосов
/ 17 июня 2010

Я не эксперт по Bluetooth, но в целом отправка данных с использованием надежных данных в 1,5 раза выше скорости отправки данных ненадежных. Я бы не пытался отправить ACK обратно ненадежным методом, потому что тогда вам придется использовать всевозможную нелепую логику, чтобы определить, не удалось ли получить ACK, что замедлит вас гораздо больше, чем просто использование надежной отправки. .

Отправка данных имеет большую задержку, что означает, что отправка 4 небольших пакетов займет больше времени, чем отправка 1 пакета с полезной нагрузкой 4x. Каждый раз, когда вы можете увеличить размер полезной нагрузки, чтобы сделать меньше посылок, вы получите выигрыш в производительности.

Если вы знаете размер и форму данных, которые вы отправляете и получаете, вы также можете уменьшить производительность, отправляя байтовые массивы или массивы чисел, а не используя NSCoding, потому что NSCoding будет занимать некоторое время для сериализации. и десериализацию (шаг, который можно пропустить, если вы просто отправляете массивы), и объем отправляемых данных будет немного больше с NSCoder, чем с необработанным массивом.

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