Первая задержка может быть вызвана сочетанием следующих факторов:
- Время для разрешения записи DNS сервера
- Время скачивать прокси
сценарий автоконфигурации, компиляция и
выполнить его, чтобы определить
эффективный прокси
- задержка в сети от вашего приложения к прокси-серверу (если в вашей среде есть прокси-сервер)
- сетевая задержка от
прокси-сервер для фактического
целевой сервер.
- задержка на
сервер для обслуживания XML
документ. Если он должен пересечь
представление объекта в памяти и
генерировать XML-документ, который
может занять некоторое время. Кроме того, если это
используя такие методы, как
XML-сериализация для генерации
документ, то в зависимости от того, как
настроен сериализатор, первый
призыв к сериализации / десериализации всегда
занимает много времени, из-за того, что
что требуется промежуточная сборка
быть сгенерированным и скомпилированным.
- Анализ XML на стороне клиента
может занять время, особенно если XML
структура документа очень сложная.
- Если XLinq (например, XMLSerializer)
генерирует временную сборку для XML
анализ и запрос, затем первый
запрос займет больше времени, чем
последующие.
Чтобы выяснить, какая часть занимает время, вставьте время входа в ваш код с помощью 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 .
Надеюсь, это поможет.