2011-08-16 4 views
6

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

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

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

ответ

9

Это на самом деле плохой пример - вы обычно не должны описывать что-то тривиальное.

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

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

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

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

... 
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(...) метод для отдельных команд.

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

  • подчеркивает performance is a feature (и, действительно, часто является обязательным требованием) - это нормально, чтобы иметь код для поддержки функции! В самом деле, это форма доказательств того, что у вас есть считается (и измеряемое) производительность нового/измененного фрагмента кода
  • это совершенно контекстная как зернистая вы сделаете это
  • это, следовательно, обеспечивает значимый уровень детализации для пользователя - без безумных количеств мелочей в журнале и без агрессивного характера большинства журналов
+0

большое спасибо, кстати, как вы сделали это выпадающее меню на каждой странице, которая выводит результаты? как-то зацепился за профайлер? т. е. сохранять каждый журнал в кеше request.items? – codecompleting

+0

@codecompleting есть подключаемый API для обеспечения как краткосрочного, так и долгосрочного хранения. По умолчанию он использует хранилище ASP.NET в памяти, IIRC - но внутри мы используем SQL-Server для долгосрочного (для этого легко написать плагин). Это был вопрос? –

+0

Я хочу сделать что-то вроде: http://community.mediabrowser.tv/uploads/site_1/2314/profiler.png любопытно, как вы агрегируете все запросы для данного запроса. используя request.items? – codecompleting