Не так давно я столкнулся с проблемой, долго выполняется следующий код, выводящий ваш ip адрес.
Долгое выполнение только при первом запросе. Странно, если медленный интернет — все запросы будут немного похожи. Но разница между первым запросом и вторым — очень большая. И сайт не слишком весомый. Максимум 15 символов. Почему же так? Попробуем разобраться.
Первый запрос: 13.9691268 секунд.
Второй запрос: 00.1283174 секунд.
Почитав несколько иностранных форумов и конечно же MDSN, перепробовав много методов, я понял в чем проблема.
Оказывается, что при первом запросе WebClient берет Proxy из конфигурационных файлов Internet Explorer. Если мы уверены, что не будем использовать прокси, то требуется указать это.
Первый запрос: 00.3665608 секунд.
Проблема решена с помощью указания правильных опций объявляемых классов.
Подробнее про WebClient.Proxy
Спасибо за внимание!
System.Net.WebClient web = new System.Net.WebClient();
Console.WriteLine(web.DownloadString("http://ip.genuh.ru"));
Долгое выполнение только при первом запросе. Странно, если медленный интернет — все запросы будут немного похожи. Но разница между первым запросом и вторым — очень большая. И сайт не слишком весомый. Максимум 15 символов. Почему же так? Попробуем разобраться.
System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
timer.Start();
System.Net.WebClient web = new System.Net.WebClient();
Console.WriteLine(web.DownloadString("http://ip.genuh.ru/"));
timer.Stop();
Console.WriteLine(timer.Elapsed.ToString());
timer.Reset();
timer.Start();
Console.WriteLine(web.DownloadString("http://ip.genuh.ru/"));
timer.Stop();
Console.WriteLine(timer.Elapsed.ToString());
Первый запрос: 13.9691268 секунд.
Второй запрос: 00.1283174 секунд.
Почитав несколько иностранных форумов и конечно же MDSN, перепробовав много методов, я понял в чем проблема.
Оказывается, что при первом запросе WebClient берет Proxy из конфигурационных файлов Internet Explorer. Если мы уверены, что не будем использовать прокси, то требуется указать это.
System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
timer.Start();
System.Net.WebClient web = new System.Net.WebClient();
web.Proxy = new System.Net.WebProxy();//Строка с помощью которой мы решаем проблему.
Console.WriteLine(web.DownloadString("http://habrahabr.ru"));
timer.Stop();
Console.WriteLine(timer.Elapsed.ToString());
Первый запрос: 00.3665608 секунд.
Проблема решена с помощью указания правильных опций объявляемых классов.
Подробнее про WebClient.Proxy
Спасибо за внимание!