5

私のダウンロードマネージャーアプリケーションでは、現在の転送速度を計算するために以下のコードを使用しています。

        TimeSpan interval = DateTime.Now - lastUpdateTime;

        downloadSpeed = (int)Math.Floor((double)(DownloadedSize + cachedSize - lastUpdateDownloadedSize) / interval.TotalSeconds);

        lastUpdateDownloadedSize = DownloadedSize + cachedSize;
        lastUpdateTime = DateTime.Now;

これはほとんど私が望むように機能しますが(私は4秒ごとに速度を更新しています)、変動するため、ダウンロード速度には常にいくつかのクレイジーなスパイクがあります。私の平均ダウンロード速度は約600kB/ sで、10.25 MB / s、または-2093848 B/sのような負の値を示すこともあります。これはどうやってできるの?

リアルタイムのダウンロード率を計算するための最良の方法は何ですか?平均レート(DownloadedSize / TimeElapsed.TotalSeconds)は現実的な結果が得られないため、興味がありません。

4

1 に答える 1

4

「リアルタイム」を実現できない場合は、間隔をできるだけ小さく正確にし、間隔全体の平均を計算してコードの健全性を確認することにより、シミュレートする必要があります。例えば:

DateTime now = DateTime.Now;
TimeSpan interval = now - lastUpdateTime;
timeDiff = interval.TotalSeconds;
sizeDiff = DownloadedSize + cachedSize - lastUpdateDownloadedSize;
speed = (int)Math.Floor((double)(sizeDiff) / timeDiff);
lastUpdateDownloadedSize = DownloadedSize + cachedSize;
lastUpdateTime = now;

コードとの1つの違い:

  1. Nowを1回だけ計算し、2回使用します。
于 2012-05-08T23:33:15.517 に答える