2011-12-25 32 views
0

私は、tcpClientを使用してネットワーク通信用のいくつかのクラスを構築しています。私はtcpserverクラスが接続を受け入れ、バックグラウンドスレッドにシャッフルして、そのポートで接続を受け入れ続けることができます。私は複数のクライアントとサーバーに接続し、サーバーからクライアントへのファイル転送を行うことができます。私の開発マシンでサーバーとクライアントの両方を実行すると、ファイル転送速度が向上しています(160 mbps程度です - 私は大きなパケットサイズを使用しています)。tcpClientを使用したファイル転送の速度が遅い

大きなファイル(> 3ギガバイト)を送信しようとすると、転送の半分ほどが遅くなり、変動するように、奇妙なことに気付きました。 3つのギグ・テスト・ファイル(.iso)を送信しようとすると、2つまたは3つの他のクライアントを使用して大きなファイル(> 500meg)を転送している間も、私の開発マシンで実行していると、.isoの転送は、他のクライアントがファイルの受信を完了した後でも、1メガバイト/秒以下の低速です。それはまた、何の理由もなく、再びスピードアップして30〜80メガ/秒の範囲で変動することがあります。

エラーはなく、コードを嫌っていますが、どこが減速しているのか分かりません。

これはスレッド優先事項ですか?私は、ファイル転送の要素のいくつかを処理するために大きな変数型を使用する必要があります(ファイルサイズのint64、これまでに来たバイト数を記録する別のもの)...私はこれらの変数の値が大きくなると減速しますか?

ご協力いただければ幸いです。

+0

Ok ...クライアントに届いたときにファイルバイトを実際に書き込まないと、これらの問題はまったくありません。実際にバイトをクライアントのファイルに書き込もうとしたときに何かが起きています。私はちょうどFileStreamを使用してバイトの配列を書いています... – Pete

答えて

0

ディスクに受信されてから書き込まれるまでの間にデータに何が起こったのか考えましたか?つまり、これをメモリ配列にキャッシュしていますか?その場合、アプリケーションのメモリ使用量プロファイルはシステムの全メモリとの関係でどのくらいですか?

+0

また、ファイルサイズが2ギガ境界を越えるのと同じように、> 3gig .isoをコピーしているときに減速が起きているように見えます。そこからファイルの終わりまで、私は多くの違和感があります。ネットワーク速度の変動(ファイル書き込み速度の問題だと思います)。 – Pete

+0

ネットワークストリームとバイト配列を使ってバイトを読み込んでいます。バイト配列が現在のパケットでいっぱいになると、それを書き込まれるファイルストリームに渡します。 – Pete

+0

ビジュアルスタジオで動作しているサーバーと3つのクライアントでは、28メガ程度を使用しています。私はマシンに12ギグ持っている。 – Pete

0

LAN経由でファイルストリームを書き込むときと同じ問題が発生しました。ファイルを書き込むためにファイルストリームを使用していると仮定します。書き込みと読み取り/書き込みのアクセスを切り替えてみてください。私はそれが変更をフラッシュする良い仕事をしない読み取り/書き込みアクセスだと思う。また、ファイルが書き込まれるとファイルサイズが大きくなるのが好きですが、ファイルを書き込む前にファイル長を設定すると、パフォーマンスが向上するようです。

関連する問題