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是 type int,所以如果响应很快,它将为零。使用毫秒以获得合理的精度,并在任何情况下检查为零。

如果temp不包含数据,则您的请求中未返回任何数据,因为 URL 无法解析(异常处理程序是否运行?),或者因为 Web 服务器返回的 HTTP 代码为 200,但响应正文为空。

于 2013-02-09T21:16:12.783 回答
0

你的意思是sw.Elapsed.TotalSecondsSeconds是挂钟秒数(环绕到零,或从零开始一秒)。

堆栈跟踪会告诉你。我被迫猜测。不是一个好的调试策略。

如果发生异常,您也会继续前进。您还需要在本地测试异常情况 - 您会发现错误。

于 2013-02-09T21:16:17.980 回答