我正在尝试定期将数据流式传输到服务器,并以快速且不会阻塞 UI 的方式执行此操作。UI 也非常忙于显示数据。目前我的实现使用每 50 毫秒触发一次的 NSTimer,从圆形数组中挑选一个网络数据包并将其发送过来:
//this is the timer
networkWriteTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(sendActivity:) userInfo:nil repeats:YES];
-(void)sendActivityInBackground:(id)sender
{
[[AppConfig getInstance].activeRemoteRoom.connection sendNetworkPacket:[circularArray objectAtIndex:arrayIndex%arrayCapacity]];
}
-(void)sendActivity:(NSTimer*)timer
{
// Send it out
[self performSelectorInBackground:@selector(sendActivityInBackground:) withObject:nil];
}
我对这种方法的性能不满意。时间分析表明,执行背景选择器会产生开销,并且性能会变得非常不稳定。
我正在考虑提高性能的其他方法:
- 提高当前基于计时器的代码的性能
- 尝试大中央调度
- 使用单个操作实现 NSOperationsQueue。
- 使用唤醒、检查更新并在需要时将其发送过来的专用线程
理想情况下,我会以更快的间隔发送数据(10 毫秒甚至每个活动更新)。这就提出了一个问题:实现一系列后台发送请求的最快方法是什么,其中顺序很重要?我想确保在发送下一个数据包之前发送一个数据包。