Что такое задержка при первом вызове WCF через serviceProxy? - PullRequest
4 голосов
/ 30 сентября 2011

Есть много похожих вопросов, но все они связаны с медлительностью на стороне сервера - это все о проблемах на стороне клиента.

1-й звонок занимает 900 мс.2-й вызов занимает 20 мс.

Я сузил медлительность при первом вызове serviceProxy.Method ().Fiddler сообщает, что фактическое время в сети для первого вызова составляет 16 мс.Поскольку 2-ой вызов значительно быстрее, я вынужден сделать вывод, что проблема возникает с некоторым клиентским кодом реализации WCF, который срабатывает при первом вызове метода.

Факты:

  • Подключение к серверу происходит через wsHttpBinding
  • Объекты закодированы с помощью библиотеки Protobufs.NET Марком Гравеллом
  • Здесь приведены вопросы по SO, которые касаются проблем на стороне клиента, как у меня.1-й вызов фонового потока, чтобы просто убрать медлительность.Однако это касается симптомов, а не основной причины.

Есть идеи, почему замедление происходит на 1-м посту?

1 Ответ

2 голосов
/ 30 сентября 2011

Обычная медленная работа сервера при запуске - это ускорение пула приложений IIS, но в своем вопросе вы указали, что, хотя первый запрос составлял 900 мс, только 16 мс было потрачено на запрос сервера в соответствии с фидлером. Если это правда, это говорит о том, что что-то происходит на стороне клиента.

Одна из возможностей заключается в том, что некоторые клиентские приложения, которые сериализуют объекты, генерируют и компилируют код сериализации для этих типов данных во время выполнения, что может привести к снижению производительности при запуске

http://msdn.microsoft.com/en-us/library/aa751883.aspx

http://msdn.microsoft.com/en-us/library/ms733901.aspx

Я не знаком с протобуфами, но компиляция кода сериализации - компромисс, который делает первый вызов значительно медленнее, но делает последующие вызовы быстрее.

Не уверен, что это ваша первоначальная стоимость, но это возможно.

...