下载速度测试

时间:2016-08-31 15:45:56

标签: c# stream bandwidth download-speed

我正在用C#编写一个应用来衡量和显示下载速度。我有以下代码以块的形式下载62MB文件,这似乎适用于我的目的。我计划对此进行扩展以测量每个块所需的时间,因此可以将其绘制成图形。

在这样做之前,我有几个问题要确保这实际上正在做我认为它正在做的事情。这是代码:

private void DownloadFile()
{
  string uri = ConfigurationManager.AppSettings["DownloadFile"].ToString();
  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(uri));

  int intChunkSize = 1048576; //  1 MB chunks

  using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
  {
    byte[] buffer = new byte[intChunkSize];
    int intStatusCode = (int)response.StatusCode;
    if (intStatusCode >= 200 && intStatusCode <= 299)   //  success
    {
      Stream sourceStream = response.GetResponseStream();
      MemoryStream memStream = new MemoryStream();
      int intBytesRead;
      bool finished = false;
      while (!finished)
      {
        intBytesRead= sourceStream.Read(buffer, 0, intChunkSize);
        if (intBytesRead > 0)
        {
          memStream.Write(buffer, 0, intBytesRead);
          //  gather timing info here
        }
        else
        { 
          finished = true;
        }
      } 
    }   
  } 
}   

问题:

  1. 响应是否包含实例化时的所有数据,或仅包含标题信息? response.ContentLength确实反映了正确的值。

  2. 即使我使用1 MB的块大小,每次迭代中读取的实际字节数(intBytesRead)也要少得多,通常为16384字节(16 KB),但有时为1024(1 KB)。这是为什么?

  3. 有没有办法强制它实际读取1 MB的块?

  4. 这里是否可以将数据实际写入MemoryStream?

  5. 感谢。

0 个答案:

没有答案