С мини-профилировщиком

Означает ли это, что при использовании мини-профилировщика производственный код будет «замусорен» блоками?

using (profiler.Step("Set page title"))
{
    ViewBag.Title = "Home Page";
}

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


person codecompleting    schedule 16.08.2011    source источник


Ответы (1)


На самом деле это плохой пример — обычно вы не профилируете что-то тривиальное.

В конечном счете, выбор того, что вы хотите профилировать, зависит от вашего выбора. Есть ловушка для таких вещей, как ADO.NET, но если вы хотите, чтобы она профилировала вещи, за пределами этого, да: вам нужно помочь.

Повторное "замусоривание", ну это субъективно. И лучший подход, как правило, состоит в том, чтобы ограничить инструментирование операциями очень высокого уровня, а затем увеличивать масштаб с помощью более детальных операций только по мере необходимости (из-за выявленного проблемного места); например, у вас может быть:

...
using(profiler.Step("Refresh customer"))
{
    // ...
}
...

и только тогда, когда вы обнаружите, что с увеличением 1800 мс:

...
using(profiler.Step("Refresh customer"))
{
    using(profiler.Step("Query LDAP"))
    { ... }
    using(profiler.Step("Query primary customer DB"))
    { ... }
    using(profiler.Step("Query aux db"))
    { ... }
    using(profiler.Step("Print, scan, and OCR"))
    { ... }
}
...

Существует также метод .Inline(...) для отдельных команд.

Считаете ли вы это «мусором» или нет:

  • в нем подчеркивается, что производительность — это особенность (и действительно , часто требование) — код для поддержки ваших функций — это нормально! Действительно, это форма доказательства того, что вы оценили (и измерили) производительность нового/измененного фрагмента кода.
  • это полностью зависит от контекста, насколько вы детализируете его
  • поэтому он обеспечивает значимый уровень детализации для пользователя - без безумного количества мелочей в журнале и без инвазивного характера большинства журналов.
person Marc Gravell    schedule 16.08.2011
comment
большое спасибо, кстати, как вы сделали этот раскрывающийся список на каждой странице, которая выводит результаты? как-то подключился к профайлеру? то есть сохранять каждый журнал в кеше request.items? - person codecompleting; 17.08.2011
comment
@codecompleting есть подключаемый API для обеспечения как краткосрочного, так и долгосрочного хранения. По умолчанию он использует хранилище ASP.NET в памяти, IIRC, но внутри мы используем SQL-Server для долгосрочного использования (для этого легко написать плагин). Это был вопрос? - person Marc Gravell; 17.08.2011
comment
Я хочу сделать что-то вроде: community.mediabrowser.tv/uploads/site_1/2314 /profiler.png любопытно, как вы объединяете все запросы для данного запроса. используя request.items? - person codecompleting; 17.08.2011