HttpWebRequest является чрезвычайно медленным!

Я пользуюсь библиотекой с открытым исходным кодом для соединения с моим веб-сервером. Я был обеспокоен, что веб-сервер чрезвычайно не торопился, и затем я пытался делать простой тест в Ruby, и я получил эти результаты

Программа Ruby: 2,11 секунды для 10 HTTP ДОБИРАЮТСЯ

Программа Ruby: 18,13 секунд для 100 HTTP ДОБИРАЮТСЯ

Библиотека C#: 20,81 секунды для 10 HTTP ДОБИРАЮТСЯ

Библиотека C#: 36 847,46 секунд для 100 HTTP ДОБИРАЮТСЯ

Я представил и нашел, что проблема эта функция:

private HttpWebResponse GetRawResponse(HttpWebRequest request) {
  HttpWebResponse raw = null;
  try {
    raw = (HttpWebResponse)request.GetResponse(); //This line!
  }
  catch (WebException ex) {
    if (ex.Response is HttpWebResponse) {
      raw = ex.Response as HttpWebResponse;
    }
  }
  return raw;
}

Отмеченная строка, принимает 1 секунду для завершения отдельно, в то время как рубиновая программа, выполняющая 1 запрос, занимает.3 секунд. Я также делаю все эти тесты на 127.0.0.1, таким образом, сетевая пропускная способность не является проблемой.

Что могло вызывать, это огромное замедляется?

ОБНОВЛЕНИЕ

Проверьте измененные результаты сравнительного теста. Я на самом деле протестировал с 10, ДОБИРАЕТСЯ а не 100, я обновил результаты.

71
задан Earlz 25 March 2010 в 22:24
поделиться

3 ответа

Я обнаружил, что основной причиной медленных веб-запросов является свойство прокси. Если установить для этого свойства значение null до вызова метода GetResponse, запрос пропустит этап автоопределения прокси-сервера:

request.Proxy = null;
using (var response = (HttpWebResponse)request.GetResponse())
{
}

Автоопределение прокси-сервера занимало до 7 секунд, прежде чем возвращать ответ. Немного раздражает, что это свойство установлено по умолчанию для объекта HttpWebRequest.

169
ответ дан 24 November 2019 в 12:51
поделиться

Используйте компьютер, отличный от localhost , затем используйте WireShark , чтобы увидеть, что на самом деле происходит по сети.

Как говорили другие, это может быть несколько вещей. Взгляд на вещи на уровне TCP должен дать ясную картину.

3
ответ дан 24 November 2019 в 12:51
поделиться

Это может быть связано с тем, что вы открываете несколько подключений одновременно. По умолчанию максимальное количество открытых HTTP-соединений установлено на два. Попробуйте добавить это в свой файл .config и посмотрите, поможет ли это:

<system.net>
  .......
  <connectionManagement>
    <add address="*" maxconnection="20"/>
  </connectionManagement>
</system.net>
20
ответ дан 24 November 2019 в 12:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: