Вы рассматривали сжатие Ваших данных?
Как указано выше, мы испытываем недостаток в информации о точном характере Вашей проблемы, но сжатие данных для переноса их могло помочь.
Try explicitly setting the proxy. If you don't have a proxy defined, the HttpRequest
class will spend time searching for one. Once it has (or hasn't) found one, it will use that information for the life of the application, speeding up subsequent requests.
//internally sets "ProxySet" to true, so won't search for a proxy
request.Proxy = null;
You can also define this in the .config:
<system.net>
<defaultProxy
enabled="false"
useDefaultCredentials="false" >
<proxy/>
<bypasslist/>
<module/>
</defaultProxy>
</system.net>
Возможно, вам придется провести дополнительное исследование, чтобы выяснить, какая часть запроса занимает больше времени при первом проходе. Мой первый инстинкт подсказывает, что DNS-запрос на получение IP-адреса для указанного вами доменного имени занимает больше времени, потому что он не кэшируется при первом запуске. Это также может быть веб-сервер на другом конце, который должен запускать некоторые сценарии запуска при первом запросе. Вы упомянули, что первый запрос занимает много времени, но вы не говорите, сколько времени. Это вызывает большую проблему из-за того, что выполнение первого запроса занимает так много времени, или это просто раздражает?
Первая задержка по времени может быть вызвана комбинацией следующих факторов:
Чтобы выяснить, какая часть требует времени, вставьте время входа в свой код с помощью 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);
Вы можете вставить цикл вокруг этого и посмотреть, в чем разница для различных Компоненты между первым запросом и последующими запросами:
Если вы обнаружите, что разница заключается в загрузке, а не в запросах, вы можете продолжить исследование, получив сетевой анализ с помощью Wireshark .
Надеюсь, это поможет.