2011-01-31 15 views
0

NetworkStream.Readを使用しているときに現在のダウンロードの進行状況を知りたいと思います。それも可能ですか?私はwebclientを使用する必要がありますか?それは私が(代わりにメモリストリームデータの)ファイルを作成する必要がウェブサーバ NetworkStream.Readダウンロードの進行状況。 WebClient.DownloadProgressChangedと似ています。

  • を作成する必要があります(必ずイムない100%)

    1. ようなので

      私は、Webクライアントを使用したいいけません。

    2. httpプロトコルの制限のため、ギガビットネットワークの転送速度を適切に測定できません。

    またはwebclientを使用する必要がありますか?

    FYI、Im建物の帯域幅推定ツール。

  • 答えて

    1

    どうしたのですか?

    1. 呼び出し'stream.Read(バッファ、0、buffer.Length)現在の時刻を取得します; `ループの中で、あなたは適切な割合
    2. を計算するのに十分なバイト数を取得するまで、終了時間
    3. を取ります
    4. 受信したバイト長を、ダウンロードに要した秒数で除算します。
    5. 結果= bytes/s
    +0

    stream.Readを複数回または1回使用するプロセスオーバーヘッドがあります。最善の方法は、期待される受信データと同様のサイズのバッファを提供することによって、一度stream.Readを使用することです。あなたのメソッドの問題は、結果が正確ではなく、サイズが異なると変動することです。異なるPCを使用している場合でも結果は異なります。すべてのテストプラットフォームで似ているのは、IPv4InterfaceStatistics.BytesReceivedを使用して転送されるデータの量だけです。 IPv4InterfaceStatistics.BytesReceivedの問題は、NIC経由で転送されたすべてのデータをキャプチャすることです。続行.. –

    +0

    私は、アプリケーションから転送されたデータの量を、同じNIC上のすべてのデータではなくしたい。参考までに、私の究極の目標は、転送されるデータの良さではなく、最大チャンネル容量を測定することです。帯域幅が予期せず変動するので、あなたが提供する簡単な方法を使用することはできません。参考までに、ネットワークエミュレータを使用して、これらのすべての測定を完全なネットワーク状態(可能な場合)で実行します。 –

    +0

    stackoverflowコメントは複数の改行をサポートできないため、ここに結果を投稿することはできません。何を言おうとしているのは、これらの結果が、さまざまなテスト構成間の変動の違いを明確に示しているということです。そして予測できないので、私はそれから何かの結論を推論することはできません。私が言うことができるのは、チャネル容量をキャプチャする単純な方法を使用できないということです。チャネルが他の接続で使用されていない限り、IPv4InterfaceStatistics.BytesReceivedを使用してチャネル容量を測定できます。これが混乱をなくすことを願っています。 –

    関連する問題