我想阅读称重机插座并在GUI中更新其值。
套接字将连续发送当前权重值。 我的数据(权重)将小于100个字节。
如果我将缓冲区设为100,则需要花费太多时间来更新当前值,因为它必须读取所有剩余字节。所以,我将缓冲区大小更改为4096字节。现在值正在更新实时。
我的问题是,
---提供4096字节的性能确实是一个很大的开销(与100字节相比)??
---是否可以读取清除所有可用数据,并在收到消息时读取最后100个字节?
我用于回拨的代码:
private void ReceiveCallback(IAsyncResult ar)
{
try
{
//Get received bytes count
var bytesRead = _clientSocket.EndReceive(ar);
if (bytesRead > 0)
{
//Copy received bytes to a new byte array
var receivedBytes = new byte[ReceiveBufferSize];
Array.Copy(_buffer, 0, receivedBytes, 0, 100); //100 byte is enough for checking the data
FormatAndUpdateGUI(receivedBytes);
}
else
{
throw new Exception("Error in Reading");
}
//Read more bytes
_clientSocket.BeginReceive(_buffer, 0, _buffer.Length, 0, new AsyncCallback(ReceiveCallback), null);
}
catch (Exception ex)
{
throw new Exception("Error in Reading");
}
}
答案 0 :(得分:1)
您应始终阅读bytesRead
,以便在任何给定时间阅读最大可用数据。在这种情况下,您还可以使用byte
大小为bytesRead
的数组来优化内存使用量,以便它与您需要的内容完全匹配,而不是某些预定义的最大值。