iPhone: Которые являются самыми полезными методами для более быстрого Bluetooth?

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

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

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

Я слышал, что (например), отправка четырех отдельных наборов данных является очень, намного медленнее, чем отправка одной части данных четыре раза размером. Я сделал бы значительное сохранение путем отправки отдельных пакетов данных, которые будут не всегда сочетаться в том же пакете, когда они произойдут одновременно?

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

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

9
задан DenverCoder9 16 June 2010 в 23:29
поделиться

1 ответ

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

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

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

8
ответ дан 4 December 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: