Контекст: WebApiController вызывает бизнес-объект (эти бизнес-объекты создают и запускают несколько потоков для обработки данных от разных провайдеров), а после присоединения к ним webapi форматируют некоторые поля или добавляют другие: это каркас наших типичных контроллеров webapi:
xxxxController: WebApiController
{
StopWatch timer.Start()
.
.
businessLogic //1.create cache of some tables (around 5000 rows, 5/10Mb.)
//2.create and run threads (10 aprox)
//2.1 every thread call external services via APIs
//3.wait the join of all threads.
.
.
timer.Stop()
log(timer.elapsedMilisecond)
}
Здесь все отлично.Ответ контроллера правильный, данные верны, и все в порядке, НО, когда мы начинаем измерять время для повышения производительности, мы выяснили, что время, которое мы измерили внутри контроллера, намного меньше, чем измеренное времяв клиенте я объясняю это:
AVG, измеренные в контроллере, составляют 30 секунд.но прошедшее время, измеренное в клиенте (браузере), составляет около 10-15 секунд.подробнее:
Это не связано со временем загрузки (размер ответа avg составляет около 500 КБ)
Мы думаем, что это не из-за проблем с сериализацией (наша первая неудачная ставка) (чтобы гарантировать это, мы принудительно выделили несколько пустых ответов с 3 / 6kb, и истекшее время в клиенте на 10/15 секунд больше, чем время контроллера).Пример:
Время клиента и время WebApiController для реального и пустого ответа
- Другие контроллеры следуют тому же каркасу (но с меньшимтребования к кешу и параллельные потоки), и мы не замечаем существенного различия между apiController elapsedTime и клиентским elapsedTime (возможно, несколько миллисекунд или 1 секунда)
Итак, мой вопрос: где находится IIS(или .NET) потребляющее это время ??
возможно, коллекционер Garbagge ??(для нас 10 / 15сек - много времени для GC, но, может быть, это могло быть так?).
возможно Сжатие ответов ???(500 КБ - очень маленький размер, чтобы тратить так много времени, не так ли?)
какая-то задача в IIS, которую я не знаю?Любая помощь?
Я проанализировал конвейер RQ Webapi, и искренне, не знаю, где мы тратим это драгоценное время.(https://www.asp.net/media/4071077/aspnet-web-api-poster.pdf)
Кто-то знает, как измерить время, когда различные действия, которые происходят в .NET Framework или в IIS после возврата контроллера?
заранее спасибо!
РЕДАКТИРОВАТЬ:
детализация времени на стороне клиента (Chrome-Dev-Tool)