На самом деле это плохой пример — обычно вы не профилируете что-то тривиальное.
В конечном счете, выбор того, что вы хотите профилировать, зависит от вашего выбора. Есть ловушка для таких вещей, как 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