dotTrace показывает много неучтенного времени в PipelineRuntime.ProcessRequestNotification

Я использую dotTrace для профилирования веб-приложения WCF .Net, написанного на C# и работающего на сервере IIS. Одна запись показывает 7,77 секунд, затраченных на PipelineRuntime.ProcessRequestNotification, со следующими дочерними процессами.

  • 0.03 seconds in MyMethod
    • 0.016 seconds in HttpRequest.GetHeaders
  • 0,2 секунды в [Небезопасном обходе стека]

Это оставляет более 7 секунд совершенно неучтенными. У кого-нибудь есть представление о том, куда может уйти это пропавшее время? Возможно ли, что что-то в MyMethod съедает это время, но dotTrace просто не сообщает об этом должным образом?


person Dan Forbes    schedule 08.04.2015    source источник
comment
Мои симпатии. Почему люди мирятся с этим, мне непонятно. Если вы посмотрите на последний абзац этого поста там упоминается техника, которую я использую.   -  person Mike Dunlavey    schedule 08.04.2015


Ответы (1)


Неучтенное время в данном случае — это собственное время PipelineRuntime.ProcessRequestNotification. Это означает, что код этой конкретной функции и всех встроенных JIT-функций занял ~7 секунд.

Если мы допускаем это, но это не должно занимать так много времени, мы должны выяснить, почему. Есть две возможности: эта функция вызывается слишком много раз (Трассировка профилирования поможет это проверить) или некоторые инструкции в этой функции медленные (Построчный тип профилирования поможет вам проанализировать относительное время инструкций внутри).

person Alexey Korovin    schedule 20.04.2015