iPhone:哪种技术对于更快的蓝牙更有用?

时间:2010-06-14 14:45:23

标签: iphone objective-c cocoa-touch performance bluetooth

我正在使用GameKit将点对点蓝牙添加到iPhone射击游戏中,因此速度至关重要。我每秒发送大约40条消息,其中大多数都使用更快的GKSendDataUnreliable,所有消息都使用NSCoding进行序列化。在3G和3GS之间的测试中,这比我想要的速度慢了很多。我想知道我应该集中精力加快速度。

GKSendDataReliable的速度有多慢?对于 到达那里的少数数据包,发送GKSendDataUnreliable并让对等方发送确认以便我可以再次发送,如果我没有得到Ack,比如100ms ?

使用常规C阵列创建NSData实例而不是使用NSCoding协议进行归档要快多少?这个序列化过程(大约有十几个浮点数)是否与对象创建/释放开销一样慢,或者发生特别缓慢的事情?

我听说(例如)发送四个单独的数据集比发送四倍大小的数据要快得多。我是否会通过发送单独的数据包来实现显着的节省,这些数据包在同一时间发生时并不总是在同一个数据包中聚集在一起?

我错过了其他任何蓝牙性能机密吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:8)

我不是蓝牙专家,但一般情况下使用可靠发送数据的速度是发送数据不可靠的1.5倍。我会避免尝试使用不可靠的方法发回ACK,因为那时你将不得不放入各种荒谬的逻辑来检测ACK是否未能到达,这将使你的速度降低,而不仅仅是使用可靠的发送

发送数据具有高延迟,这意味着发送4个小数据包将比使用4倍大小的有效负载发送1个数据包花费更多时间。每当您可以增加有效负载大小以减少发送时,您将获得性能优势。

如果您知道要发送和接收的数据的大小和形状,您还可以通过发送字节数组或数字数组而不是使用NSCoding来挤出一些性能,因为NSCoding将花费一些时间来序列化并且反序列化(如果您只是发送数组,则可以跳过这一步骤),使用NSCoder时发送的数据量将比使用原始数组时略多。