Скорость HttpWebRequest / HttpWebResponse - PullRequest
       7

Скорость HttpWebRequest / HttpWebResponse

3 голосов
/ 29 сентября 2011

Есть ли более быстрая альтернатива приведенному ниже коду для получения ответа http в строку?

string req = "http://someaddress.com";
Stopwatch timer = new Stopwatch();
timer.Start();
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
      using (Stream dataStream = response.GetResponseStream())
      {
            StreamReader reader = new StreamReader(dataStream);
            reader.ReadToEnd();
      }
}
timer.Stop();
Console.WriteLine(timer.Elapsed);

Ответ довольно большой - около 2 МБ и находится в формате XML.После того, как этот код завершается, таймер равен ~ 50 секундам.Когда я вставляю тот же URL-адрес в окно браузера, для отображения документа XML требуется около 35 секунд.

1 Ответ

3 голосов
/ 29 сентября 2011

(Между прочим, у вас должно быть заявление using для ответа ... и я согласен с комментарием Асбьёрну. Вы должны обновить свой вопрос с более подробной информацией.)

Вы должны использовать что-то вроде Wireshark , чтобы посмотреть, как выглядят запросы и ответы в каждом случае. Например, указывает ли браузер, что он поддерживает сжатые ответы, а WebRequest нет? Если это из-за медленного соединения, это может быть важной частью.

Еще одна вещь, которую нужно проверить, - занимает ли декодирование строк значительное время в коде .NET ... если вы просто считываете данные из потока в байтовый массив (возможно, просто отбрасываете их, когда читаете), это значительно быстрее? Например:

using (var response = request.GetResponse())
{
    using (var stream = response.GetResponseStream())
    {
        // Just read the data and throw it away
        byte[] buffer = new byte[16 * 1024];
        int bytesRead;
        while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) > 0)
        {
            // Ignore the actual data
        }
    }
}
...