Как мне интерпретировать этот результат MiniProfiler?

В настоящее время я пытаюсь проанализировать проблему с производительностью, когда бритвенное представление ASP.NET MVC отображается очень медленно: для возврата ответа в браузер требуется более 40 секунд. Эта проблема возникает не всегда: обычно страница загружается за ~1/2 секунды.

Ниже приведено изображение части трассировки MiniProfiler, сделанной для указанной страницы, когда она загружается медленно. Столбец справа — это время, прошедшее с начала запроса, и трассировка показывает там большие скачки в несколько секунд во время рендеринга бритвенных представлений. Чего я действительно не понимаю, так это почему время в двух других столбцах («длительность (мс)» и «с детьми (мс)») не отражает эти многосекундные задержки: я ожидаю увидеть там большие числа также.

Что также бросается в глаза, так это тот факт, что большие задержки возникают при выполнении шагов «Find: EditorTemplates/...». Обратите внимание, что эти шаблоны не существуют (примечание: я не пытаюсь явно отображать эти шаблоны редактора, но их поиск, похоже, вызван сетка кендо mvc на странице). Могут ли большие задержки быть вызваны ожиданием дискового ввода-вывода, чтобы установить, что эти файлы не существуют? Если да, то как это могло только время от времени занимать несколько секунд и обычно выполняться относительно быстро?

Как мне интерпретировать эти результаты и что может быть причиной многосекундных задержек?

трассировка мини-профилировщика


person TC.    schedule 17.07.2019    source источник


Ответы (1)


Ваша проблема похожа на ту, что у нас была недавно: первый вызов каждой отдельной страницы занимал целую вечность (страница - это что-то вроде /Login, /Templates, /Files и т. д.). Каждый последовательный вызов одной и той же страницы был намного быстрее. Проблема заключалась в том, что всякий раз, когда вызывалась новая страница, ее нужно было сначала скомпилировать. Скомпилированная сборка была закэширована, чтобы в следующий раз было быстрее.

Мы строим наш проект с целью Clean и Build. После этого мы публикуем его со следующими параметрами для MSBuild:

/t:WebPublish
/p:Configuration=Release 
/p:WebPublishMethod=FileSystem
/p:publishUrl=%build.dirMSBuild%\projectName
/p:PrecompileBeforePublish=true 
/p:UseMerge=true 
/p:SingleAssemblyName=AppCode
/p:VisualStudioVersion=16.0
/p:DeleteExistingFiles=true 
/p:DebugSymbols=false 
/p:ExcludeApp_Data=false

Наиболее важным флагом здесь является PrecompileBeforePublish, который обеспечивает сборку представлений в процессе сборки проекта. Теперь каждая страница загружается почти мгновенно, даже при первом вызове.

person Carsten Franke    schedule 23.07.2019