0

インターネット速度を測定するために使用しているコードがあります。コードはローカルでは完全に機能しているように見えますが、サーバーで使用すると「ゼロで除算しようとしました」というエラーが表示されます。また、temp.tostring() は「byte[]0」を返します

System.Diagnostics.Stopwatch sw;
Byte[] temp;
protected void Page_Load(object sender, EventArgs e)
{
    System.Net.WebClient webClient = new System.Net.WebClient();

    sw = System.Diagnostics.Stopwatch.StartNew();
    try
    {
        temp = webClient.DownloadData("http://www.xxx.com/yyy.rar");
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }
    sw.Stop();

    long speed = temp.Length / sw.Elapsed.Seconds;

    Response.Write(Convert.ToInt32((speed / 1000)).ToString());
}

アップデート!

このようにユーザーのインターネット速度を測定することについて、私の論理が間違っていたことが判明しました。このコードはデータをローカルにダウンロードするため、数ミリ秒で完了します。ユーザーのインターネット速度を測定するにはどうすればよいですか?

4

2 に答える 2

0

あなたはおそらくゼロで割っています。

sw.Elapsed.Seconds

ゼロです。 Secondsは 型intなので、応答が速い場合はゼロになります。妥当な精度のためにミリ秒を使用し、いずれにせよゼロをチェックします。

データが含まれていない場合temp、URL を解決できなかった (例外ハンドラーが実行されたか)、または Web サーバーが HTTP コード 200 を返したが空の応答本文だったため、要求でデータが返されませんでした。

于 2013-02-09T21:16:12.783 に答える
0

あなたが意味したのはsw.Elapsed.TotalSeconds. Secondsウォールクロック秒 (ゼロにラップアラウンド、または 1 秒間ゼロから開始) です。

スタック トレースがそれを示しているはずです。私は推測を余儀なくされました。デバッグするのに適した戦略ではありません。

また、例外が発生した場合も続行します。また、例外的なケースをローカルでテストする必要があります。エラーが見つかったはずです。

于 2013-02-09T21:16:17.980 に答える