0

ローカル ファイルを読み取り、ネットワーク (ローカルおよびインターネット) 経由で送信する場合、推奨または推奨されるバッファー サイズはありますか? Windows VM のページ サイズであるため 4k を使用していますが、これは遅延、帯域幅、ジッターなどの複雑な関数になる可能性があるため、ほとんどの場合にうまく機能する実装を理解したいと思います。コードの変更行数を最小限に抑えるためのより単純なソリューション (コード監査) を希望します。

using (var destFs = new NetworkStream(URI, FileMode.OpenOrCreate))
{
    var buffer = new byte[4*1024]; // <= better buffer size?
    int bytesRead;
    while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
    {
        destFs.Write(buffer, 0, bytesRead);
    }
}
4

2 に答える 2

0

場合によります !

TCP を使用している場合 (ここに興味があるかもしれません)

TCP パケット サイズの絶対的な制限は 64K (65535 バイト) ですが、実際には、下位層 (イーサネットなど) のパケット サイズが小さいため、これは表示されるパケットのサイズよりもはるかに大きくなります。

たとえば、イーサネットの MTU (Maximum Transmission Unit) は 1500 バイトです。一部のタイプのネットワーク (トークン リングなど) は MTU が大きく、MTU が小さいタイプもありますが、値は物理テクノロジごとに固定されています。

UDPを使用している場合

正しい最大 UDP メッセージ サイズは 65507 で、次の式で決定されます: 0xffff - (sizeof(IP ヘッダー) + sizeof(UDP ヘッダー)) = 65535-(20+8) = 65507

于 2013-03-13T01:00:43.947 に答える