webClient.DownloadData到byte []

时间:2013-02-09 21:12:21

标签: .net

我有一个代码,我用它来测量网速。代码看起来在本地完美运行,但是当我在服务器上使用它时会出现错误“尝试除以零”。 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());
}

UPDATE!

事实证明,我的逻辑是错误的测量这样的用户互联网速度。这段代码在本地下载数据,所以在几毫秒内完成。我该怎么做才能衡量用户的互联网速度?

2 个答案:

答案 0 :(得分:0)

你可能除以零因为

sw.Elapsed.Seconds

为零。 Seconds的类型为int,因此如果响应速度很快,则为零。使用毫秒以获得合理的精度,并且无论如何都要检查零。

如果temp不包含任何数据,请求中没有返回任何数据,因为无法解析URL(Exception处理程序是否运行?),或者因为Web服务器返回的HTTP代码为200,但是为空回应机构。

答案 1 :(得分:0)

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

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

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