0

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

1 に答える 1

1

bytesReadいつでも最大の利用可能なデータを読み取ることができるように、常に を読み取っている必要があります。この場合、事前定義された最大値ではなく、必要なものと正確に一致するようにbyte、サイズの配列を使用してメモリ使用量を最適化することもできます。bytesRead

于 2013-06-20T06:40:31.813 に答える