計量機のソケットを読み取り、その値を 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");
}
}