계량기 소켓을 읽고 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");
}
}
'catch'블록에'throw new Exception ("...")을 넣는 것은 꽤 무의미합니다. 방금 실제 * 예외를 버렸습니다. throw하는 예외의 생성자 ('InnerException'이됩니다)에'ex'를 건네 주면됩니다. 그렇지 않은 경우에는'try/catch'를 모두 제거하면됩니다. –
'bytesRead> 0' 인 경우 ** 100 **과 같은 ** 보장이 없습니다. –