如何在 Xamarin Android 中加快 SPP 吞吐量?
How to speed up SPP throughput in Xamarin Android?
我正在尝试让 Xamarin 应用程序通过蓝牙从我们的自定义 PCB 接收大约 10 kbps 的 SPP 数据。 PCB 上的 BC127 模块可以发送最大大小为 255 字节的数据包,因此应用程序需要每隔约 25 毫秒接收一个数据包。我正在使用数据包来分隔数据,因此需要一次接收一个。
测试应用不断尝试接收数据,但有时当它返回接收方法开始时,接收流中有 2+ 个数据包在等待。我的问题是,是什么导致我的蓝牙接收方法出现巨大延迟?我附上了下面的方法。连接到蓝牙模块后,应用程序只做 运行 while(true) 循环中的此方法。
public byte[] ReadBluetoothPacket()
{
int bytesAvailable = 0;
while (bytesAvailable == 0) // Wait for packet to arrive
{
bytesAvailable = stream.BaseInputStream.Available(); // Find out how big the packet is
}
byte[] result = new byte[bytesAvailable];
_socket.InputStream.Read(result, 0, bytesAvailable); // Add the bytes to the buffer
return result;
}
我认为问题是由于 Android OS 正在执行后台任务,这阻碍了我的接收线程。结果证明这只是一个间歇性问题,重写数据接收器以一次处理多个数据包解决了它。
我正在尝试让 Xamarin 应用程序通过蓝牙从我们的自定义 PCB 接收大约 10 kbps 的 SPP 数据。 PCB 上的 BC127 模块可以发送最大大小为 255 字节的数据包,因此应用程序需要每隔约 25 毫秒接收一个数据包。我正在使用数据包来分隔数据,因此需要一次接收一个。
测试应用不断尝试接收数据,但有时当它返回接收方法开始时,接收流中有 2+ 个数据包在等待。我的问题是,是什么导致我的蓝牙接收方法出现巨大延迟?我附上了下面的方法。连接到蓝牙模块后,应用程序只做 运行 while(true) 循环中的此方法。
public byte[] ReadBluetoothPacket()
{
int bytesAvailable = 0;
while (bytesAvailable == 0) // Wait for packet to arrive
{
bytesAvailable = stream.BaseInputStream.Available(); // Find out how big the packet is
}
byte[] result = new byte[bytesAvailable];
_socket.InputStream.Read(result, 0, bytesAvailable); // Add the bytes to the buffer
return result;
}
我认为问题是由于 Android OS 正在执行后台任务,这阻碍了我的接收线程。结果证明这只是一个间歇性问题,重写数据接收器以一次处理多个数据包解决了它。