我有一个代码,我用它来测量网速。代码看起来在本地完美运行,但是当我在服务器上使用它时会出现错误“尝试除以零”。 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!
事实证明,我的逻辑是错误的测量这样的用户互联网速度。这段代码在本地下载数据,所以在几毫秒内完成。我该怎么做才能衡量用户的互联网速度?
答案 0 :(得分:0)
你可能除以零因为
sw.Elapsed.Seconds
为零。 Seconds
的类型为int
,因此如果响应速度很快,则为零。使用毫秒以获得合理的精度,并且无论如何都要检查零。
如果temp
不包含任何数据,请求中没有返回任何数据,因为无法解析URL(Exception处理程序是否运行?),或者因为Web服务器返回的HTTP代码为200,但是为空回应机构。
答案 1 :(得分:0)
你的意思是sw.Elapsed.TotalSeconds
。 Seconds
是挂钟秒(环绕零,或从零开始,持续一秒)。
堆栈跟踪会告诉你的。我被迫猜测。不是一个好的调试策略。
如果发生异常,你也会继续前进。您还需要在本地测试异常情况 - 您会发现错误。