質問

データを読み込むときは、ネットワークを、指定のバッファデータを受信するために:

byte[] b = new byte[4096];
socket.Receive(b);

今の私の第一に考えはもちろん有効利用を図るため、受信バッファによる宣言で一員として変数のクラスです。私の次の課題であることを受け取っていませんすべてのデータを期待したいなバッファーマデータです。これは簡単に目を追跡することにより、countバイトを受け、指定のオフセット:

socket.Receive(m_ReceiveBuffer, count, m_ReceiveBuffer.Length - count);

現在、問題はこの場ではまだまだ十分ではありません、私は推測による成長のバッファー、コピーメモリは、引き続きこのバッファです。と仮定するといった間違っているのは、このバッファの成長が続き、場合に十分に大きいメッセージを受けたもののシステムのメモリを消費します。

そのアイデアをいかにして適切に対応す。がより良い方法のデータだけでは、コピー、成長し、記入の上、コピー、成長し、その特徴の一つです。

役に立ちましたか?

解決

読み込むチャンク:

const int ChunkSize = 4096;
int bytesRead;
byte[] buffer = new byte[ChunkSize];
while ((bytesRead = socket.Receive(buffer, 0, ChunkSize, SocketFlags.None)) > 0)
{
    byte[] actualBytesRead = new byte[bytesRead];
    Buffer.BlockCopy(buffer, 0, actualBytesRead, 0, bytesRead);
    // Do something with actualBytesRead, 
    // maybe add it to a list or write it to a stream somewhere
}

他のヒント

前からシステム。います。ソケットソケットがありましたご使用いただけません。います。ソケットTcpClient(UdpClient)はすべての汚バッファーできるようになりまし変換で簡単に管理されストリーム?

なされることを忘れてはな量のデータを受けないことになるがどのご依頼は、常に戻りから値を受けます。とのできないメモリが実際に処理だけを受けら.

第一に、個別のコードのデータや処理のデータです。受信バッファのデータまでのコードがコピーでの加工です。の処理区での決定を受けた場合、十分なデータな何かと便利です。放置しないでください、ネットワークからのデータの受信バッファまでとしての対象になるときがある。ネットワークの受信バッファと思うとしてもお使いいただけます。をバッファを支援するように再利用バッファです。いいアイデアメッセージのサイズです。の支援を決定するサイズのバッファです。の場合を主張する(または類似した時の読み取り/書き込みのポインタの循環バッファが、その後増えたサイズのバッファです。一度バッファのサイズが大きく上がれます♪※数に限りがございじることができる十分なデータのバッファ処理をコードで高速な円形のバッファがオーバーフローしない.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top