2

Windowsでは、このrecv関数を使用してソケットからデータを受信して​​いるとしましょう。最適なバッファの大きさに興味がありますか?バイトにすることも、1024バイト以上にすることもでき51200ます。どちらがパフォーマンスに優れているのだろうかと思います。

recvこれは関数だけに当てはまるわけではありません。たとえば、大きなテキストファイルを読んでいる場合、非常に大きなバッファが必要ですか、それとも小さなバッファが必要ですか。

4

4 に答える 4

3

オペレーティングシステムは独自のバッファリングを実行するため、バッファのサイズは実際には重要ではありません。パフォーマンスの低下は関数呼び出しにあります。1バイトのバッファーは、への呼び出しが多すぎるため、非効率になりますrecv()。バッファが大きすぎると、スペースが無駄になります。

最適なサイズは、1回の呼び出しで受信または処理できると予想されるデータの2倍のサイズであり、recv()下限は約1または2tcpフレームです。

私は個人的に4KBのバッファーを使用していますが、それは私自身の好みであり、作成しているアプリケーションに大きく依存します。

于 2011-09-28T13:52:52.593 に答える
0

オペレーティングシステムはすでにそれをバッファリングしているので、一度に1バイトだけ読み取る方がよいでしょう。

于 2011-09-28T13:41:33.093 に答える
0

これは、期待するデータの種類と期待するプロトコルによって異なります。たとえば、UDPはパケット全体を一度に提供するため、最適なバッファサイズは1500になります。

実際のパフォーマンスの障害は、実行する関数呼び出し(recvこの場合)です。パフォーマンスを向上させるために、デフォルトの大きな値から始めて、受信しているパケットサイズを分析することができます。分析に基づいて、(ほぼ)「理想的な」バッファサイズを渡すことができます。

于 2011-09-28T15:03:21.857 に答える
0

サーバーで実行するサービスがわからないサーバータイプの状況では、[128,1024,4096,16384,65536]などのさまざまなサイズのバッファープールの配列を使用できます。何かが接続されたら、128サイズを使用し、128がすべて入った場合は、次回は1024を使用します。

既知のプロトコル/ロードを備えたクライアントまたはサーバーでは、それを推測してください(他のポスターで示唆されているように:)

Rgds、マーティン

于 2011-09-28T16:09:35.550 に答える