WebClient.DownloadFile занимает слишком много времени перед отправкой первого запроса - PullRequest
1 голос
/ 18 января 2011

Я написал очень простое консольное приложение, которое просто загружает файл, используя следующий фрагмент кода:

System.Net.WebClient web = new System.Net.WebClient ();
web.DownloadFile ("http://www.google.com", "file.txt");

На моей предыдущей машине разработки это было очень быстро. Как только я выполнил метод DownloadFile, запрос прошел по проводам, и ответ вернулся очень скоро. Я проверил это поведение с помощью инструмента ProcMon.

Тем не менее, после переключения на другую машину, которая оказывается намного более мощной, чем моя первоначальная коробка разработки, я заметил, что ничего не произойдет в течение 5-8 секунд при вызове DownloadFile. Переход на тот же URL-адрес в браузере показал бы почти немедленные результаты.

Потратив несколько часов на изучение этого, входя в исходный код .NET, я, наконец, сдался в System.Net.ServicePointManager.FindServicePoint, когда пошаговое выполнение как-то больше не имело смысла, и где какое-то разрешение прокси, казалось, было причиной.

Я наконец выключил Автоматическое определение настроек в диалоговом окне Параметры локальной сети диалогового окна Свойства обозревателя , найденного в Internet Explorer 8 (я использую Windows 7 x64), оставляя диалоговое окно без установленного флажка. Это волшебным образом заставляло все делать очень, очень быстро. Нет больше задержки.

Ну, я нашел способ обойти проблему, которую я наблюдал, но я был бы рад, если бы кто-то мог поделиться некоторыми идеями относительно того, что может быть не так с моим кодом. Можно ли как-то добиться того же эффекта, настроив экземпляр WebClient?

Ответы [ 2 ]

9 голосов
/ 18 января 2011

Вы пытались явно установить прокси-сервер?

web.Proxy = new WebProxy();

Это должно быть в основном эквивалентно высказыванию: "Не используйте прокси вообще - даже не пытайтесь".

3 голосов
/ 18 января 2011

Вы пытались установить свойства web.Proxy?

Пример:

System.Net.WebClient web = new WebClient();
web.Proxy = new WebProxy("Address here");
web.DownloadFile("http://www.google.com", "file.txt");
...