Долгое время загружать первое соединение в C # .NET
-
06-07-2019 - |
Вопрос
Я делаю программу, которая подключается к веб-сайту и загружает с него XML. Затем он отображает информацию для пользователя. Р>
Проблема, с которой я столкнулся, заключается в том, что когда я впервые открываю программу и начинаю загружать информацию XML, это занимает очень много времени. Когда я загружаю другую страницу с сайта с открытой программой, загрузка занимает около полсекунды. Мне было интересно, есть ли способ избежать этого.
В настоящее время я использую HttpWebRequest для загрузки потока и StreamReader для его чтения. Затем я анализирую XML с помощью XLINQ.
Решение
Попробуйте явно настроить прокси. Если вы не определили прокси, класс HttpRequest
будет тратить время на его поиск. Как только он найдет (или не найдет), он будет использовать эту информацию для жизни приложения, ускоряя последующие запросы.
//internally sets "ProxySet" to true, so won't search for a proxy
request.Proxy = null;
Вы также можете определить это в .config:
<system.net>
<defaultProxy
enabled="false"
useDefaultCredentials="false" >
<proxy/>
<bypasslist/>
<module/>
</defaultProxy>
</system.net>
Другие советы
Первая задержка может быть вызвана сочетанием следующих факторов:
<Ол>Чтобы выяснить, какая часть занимает время, вставьте время входа в ваш код с помощью System.Diagnostics.Stopwatch ():
// this is the time to get the XML doc from the server, including the time to resolve DNS, get proxy etc.
System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
timer.Start();
HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
timer.Stop();
Console.WriteLine("XML download took: " + timer.ElapsedMilliseconds);
timer.Start();
// now, do your XLinq stuff here...
timer.Stop();
Console.WriteLine("XLinq took: " + timer.ElapsedMilliseconds);
Вы можете вставить цикл вокруг этого и посмотреть, в чем разница между различными компонентами между первым и последующими запросами.
Если вы обнаружите, что разница заключается в загрузке, а не в запросах, то вы можете продолжить расследование, проанализировав сеть с помощью
Возможно, вам придется провести дополнительное исследование, чтобы выяснить, какая часть запроса занимает больше времени при первом проходе. Мой первый инстинкт говорит, что DNS-запрос на получение IP-адреса для указанного вами доменного имени занимает больше времени, поскольку он не кэшируется при первом запуске. Это может быть также веб-сервер на другом конце, который должен запускать некоторые сценарии запуска при первом запросе. Вы упомянули, что первый запрос занимает много времени, но вы не говорите, сколько времени. Вызывает ли это большую проблему, так много времени занимает выполнение первого запроса, или это просто раздражение?