Скачать тест скорости

Я пишу приложение на C# для измерения и отображения скорости загрузки. У меня есть следующий код для загрузки файла размером 62 МБ, который, кажется, хорошо работает для моих целей. Я планирую расширить это, чтобы измерить время, необходимое для каждого куска, чтобы его можно было изобразить.

Прежде чем сделать это, у меня есть несколько вопросов, чтобы убедиться, что это действительно то, что я думаю. Вот код:

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 МБ, фактическое чтение байтов (intBytesRead) в каждой итерации намного меньше, обычно 16384 байта (16 КБ), но иногда 1024 (1 КБ). Почему это?

  3. Есть ли способ заставить его на самом деле читать куски 1 МБ?

  4. Есть ли здесь какая-то цель для записи данных в MemoryStream?

Благодарю.

Дэн

0 ответов

Другие вопросы по тегам