ファイルをダウンロードするWebClientの現在のダウンロード速度を取得しようとしていますが、式を使用すると、うまくいくと確信しています:
Stopwatch.Stop();
double msElapsed = Stopwatch.Elapsed.TotalMilliseconds;
int bytesDownloaded = (int)e.BytesReceived - lastBytesDownloaded;
double downloadSpeed = (double)bytesDownloaded / (msElapsed / 1000);
lastBytesDownloaded = (int)e.BytesReceived;
Stopwatch.Restart();
Stopwatch は、ファイルのダウンロードを開始したときに開始したストップウォッチであり、lastBytesDownloaded はクラス変数であり、これはすべて downloadProgressChanged イベント内にありますが、ダウンロード速度は実際の速度とは大きく異なります。
たとえば、ファイルを 500kb/s でダウンロードした場合、(たとえば) 10kb/s から 50mb/s に完全にランダムに急速にジャンプします。
それをいくつか編集することで、正確な平均ダウンロード時間を取得できます。
double sElapsed = Stopwatch.Elapsed.TotalSeconds;
int bytesDownloaded = (int)e.BytesReceived;
double downloadSpeed = bytesDownloaded / sElapsed;
しかし、それは私が望むものではありません。現在のダウンロード速度をより安定して読み取るにはどうすればよいですか?