Понимание веб-запросов

В моем коде (C #) я использую WebRequest:

var request = WebRequest.Create(url);

Почему-то эта строка запускается примерно 2-3 секунды. Я искал решение, но не нашел для создания запроса. Я пробовал разные URL-адреса (http и https, google и т. Д.), Но, похоже, ничего не помогает. Кто-нибудь еще испытывал такое поведение? Может кто-нибудь объяснить, что именно происходит во время создания запроса? Есть альтернативы?

Кстати - я на 64-битной Win 7 (Bootcamp)

Изменить - измерено 3,126 секунды с секундомером для следующего кода (беспроводная связь):

var request = WebRequest.Create("http://www.google.com");

В той же сети, только проводной, это заняло 0,01 секунды.

Всем спасибо!


person Barracuda    schedule 25.10.2012    source источник
comment
Как вы измеряете время, необходимое для создания запроса?   -  person Justin Niessner    schedule 26.10.2012
comment
Сколько времени потребуется, если вы просто введете URL-адрес в браузер?   -  person jac    schedule 26.10.2012
comment
Если все другие источники не работают, и вы хотите увидеть, что .Net делает за кулисами, вы можете получить копию самого источника .Net по адресу linksource.microsoft.com/netframework.aspx.   -  person Zugbo    schedule 26.10.2012
comment
Джастин - я измеряю с помощью регистрации - я знаю, что это не очень точно, но дает представление. Beaner - например, www.google.com занимает меньше секунды. Итак, при создании запроса я действительно обращаюсь к нему?   -  person Barracuda    schedule 26.10.2012
comment
В этом мало смысла, он просто создает экземпляр HttpWebRequest или FtpWebRequest, в зависимости от URL-адреса. На моей машине занимает 3 микросекунды. Чтобы это измерить, вам понадобится секундомер.   -  person Hans Passant    schedule 26.10.2012
comment
по секундомеру: 3,126 секунды   -  person Barracuda    schedule 26.10.2012
comment
Возможно, у вас очень плохое интернет-соединение? Как спросил Бинер, сколько времени вам нужно, чтобы перейти на другие страницы в Интернете в своем браузере?   -  person Kirk Woll    schedule 26.10.2012
comment
Как я уже сказал, google.com занимает меньше секунды с Chrome и Explorer, но WebRequest.Create (google.com) занимает 3,126 секунды.   -  person Barracuda    schedule 26.10.2012
comment
Это очень странно - в той же сети при беспроводном подключении потребовалось 3,126 секунды, а при проводном - как и ожидалось 0,01 секунды. Всем спасибо!   -  person Barracuda    schedule 26.10.2012
comment
Когда вы создаете WebRequest, он инициализирует прокси по умолчанию. В прошлом у меня были проблемы, когда неправильно настроенные параметры прокси-сервера могли вызвать значительную задержку в создании WebRequest.   -  person moribvndvs    schedule 26.10.2012


Ответы (1)


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

var request = WebRequest.Create("http://www.google.com");
request.Proxy = null;

Обновлять

У меня нет других идей, но вот некоторые вещи, которые вы можете попытаться сузить.

  1. Включите ведение журнала, поместив следующий код в свой файл конфигурации:

    <configuration>
      <system.diagnostics>
        <trace autoflush="true" />
        <switches>
          <add name="System.Net" value="Verbose"/>
        </switches>
      </system.diagnostics>
    </configuration>
    
  2. Просмотрите исходный код WebRequest.Create в ILSpy или аналогичном инструменте и попробуйте сделать то же самое, что и он. Например, вы можете попробовать создать new HttpWebRequest(...) вместо вызова WebRequest.Create и посмотреть, получится ли у вас такое же поведение.

person StriplingWarrior    schedule 25.10.2012
comment
Раньше для меня это определенно было проблемой из-за неправильной настройки параметров прокси. - person moribvndvs; 26.10.2012
comment
действительно, это правда, но моя задержка была связана с первой строкой (создание), а не с ответом. в любом случае спасибо - person Barracuda; 26.10.2012
comment
@Barracuda: Ах, я предполагал, что это было реальное соединение, которое длилось так долго. Я добавил пару дополнительных мыслей. Удачи с этим. - person StriplingWarrior; 26.10.2012
comment
@Barracuda: вы также можете проверить, связана ли эта проблема: social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/. Похоже, может возникнуть какая-то тупиковая ситуация, когда система пытается открыть файл конфигурации, чтобы выяснить настройки подключения. - person StriplingWarrior; 26.10.2012