Плохая производительность веб-API

Недавно я преобразовал наше существующее приложение ASP.NET MVC 2 в MVC 4 с серверной частью WebAPI. К сожалению, я заметил некоторые серьезные проблемы с производительностью в отношении WebAPI.

Я установил MiniProfiler и добавил несколько шагов, чтобы увидеть, смогу ли я определить узкое место, и, к моему удивлению, это не база данных. До преобразования такой запрос занимал бы не более ~50 мс, поэтому то, что эти простые запросы занимают более 2 секунд, немного шокирует.

введите здесь описание изображения

Странная часть заключается в том, что все это заключается в том, что большая часть задержки возникает еще до того, как запрос дойдет до самих вызовов SQL.

Мне было интересно, есть ли известный способ более глубоко связать MiniProfiler с вызовами WebAPI для дальнейшего изучения того, что здесь происходит на самом деле. Будем очень благодарны любой помощи.

FWIW, вот код, используемый для этого запроса

Контроллер веб-API:

[HttpGet]
public bool AssetExistsById(string assetId) {
    using (Current.Profiler.Step("WebAPI Call To Model")) {
        return Asset.AssetExists(assetId);
    }
}

Модель актива:

public static bool AssetExists(string assetId) {
    using (Current.Profiler.Step("WCF call to DataAccess lib")) {
        return WcfEndPoint.AssetExists(assetId);
    }
}

Спасибо!

Обновить

Итак, я узнал, что здесь происходит ... Оказывается, у меня была включена трассировка диагностики системы в моем файле App_Start/WebApiConfig.cs. Я случайным образом закомментировал следующую строку, и все было исправлено.

config.EnableSystemDiagnosticsTracing();

Надеюсь, это поможет другим!


person Josh Sullivan    schedule 16.04.2013    source источник
comment
Пробовали ли вы взять профиль VS, чтобы выяснить, что занимает так много времени?   -  person Youssef Moussaoui    schedule 16.04.2013
comment
Есть ли у вас статические страницы/изображения внутри веб-приложения для проверки времени загрузки? Это может быть связано с сетью/сервером.   -  person Dmitry S.    schedule 17.04.2013
comment
@YoussefMoussaoui Спасибо за ответ! На самом деле я запустил профилировщик, но не нашел ничего особенно интересного в том, почему мои запросы занимают так много времени... Самая длинная часть — маршрутизация запроса, но даже она была относительно короткой. Возможно, я использую неправильный профайлер? Я использую VS2012, если это поможет.   -  person Josh Sullivan    schedule 22.04.2013
comment
@DmitryStarosta Интересная мысль. У меня очень тяжелое приложение на стороне клиента со многими файлами js. Возможно, если я запущу это в prod и минимизирую все, я увижу разницу...   -  person Josh Sullivan    schedule 22.04.2013
comment
@Jaysche Youssef говорит о Visual Studio Profiler, а не о MvcMiniProfiler. Можете ли вы воспроизвести проблему? Вы тестировали Asset.AssetExists без WebApi?   -  person Cybermaxs    schedule 22.05.2013
comment
Выяснил проблему, банда. Я обновил свой пост с решением. Спасибо за вашу помощь, всем!   -  person Josh Sullivan    schedule 05.06.2013


Ответы (1)


Итак, я узнал, что здесь происходит ... Оказывается, у меня была включена трассировка диагностики системы в моем файле App_Start/WebApiConfig.cs. Я случайным образом закомментировал следующую строку, и все было исправлено.

config.EnableSystemDiagnosticsTracing();

Надеюсь, это поможет другим!

person Josh Sullivan    schedule 04.06.2013
comment
Жаль, что я не видел это 4 часа назад! У меня была именно эта проблема, и я нашел решение точно так же. :) Интересно, что снижение производительности мы наблюдали только при развертывании в Azure. При локальном запуске приложение выглядело нормально. - person Greg M.; 10.11.2015
comment
Да, несколько недель назад я снова возился с разными диагностическими бегунами и на этот раз не заметил проблем с задержкой. Интересно, что вы заметили проблемы только после развертывания в Azure! Возможно, проблема с использованием трассировки диагностики при запуске Release vs Debug? - person Josh Sullivan; 11.11.2015
comment
Упомянутый мной экземпляр Azure предназначен для непрерывного развертывания и интеграционного тестирования. Выполняется отладочная версия сборки. - person Greg M.; 11.12.2015
comment
То же самое здесь, почти через пять лет после того, как был сделан этот пост. +1! - person willem; 15.01.2018