ネットワーク経由でデータを読み取る場合、データを受信するバッファを指定します。
byte[] b = new byte[4096];
socket.Receive(b);
私が最初に考えたのは、もちろん、受信バッファーをクラスのメンバー変数として宣言して再利用することです。次の問題は、期待するすべてのデータを受信していないため、データをバッファリングする必要があることです。これは、受信したバイト数を追跡し、オフセットを指定することで簡単に実現できます。
socket.Receive(m_ReceiveBuffer, count, m_ReceiveBuffer.Length - count);
さて、ここでの問題は、それでも十分でない場合は、バッファを拡張する必要があると推測していることです。つまり、メモリをコピーして、このバッファに受信し続ける必要があります。何かがうまくいかなかったと仮定すると、このバッファは増え続け、十分な大きさのメッセージが受信されると、システムのメモリが不足します。
これを適切に処理する方法はありますか?私が話している、単に塗りつぶし、コピー、拡大、塗りつぶし、コピー、拡大するよりも、データを受信するためのより良い方法はありますか?