Низкая производительность профилирования EF с помощью mvc-mini-profiler

Когда я создаю свой контекст, используя приведенную ниже функцию, профилировщик показывает увеличение примерно на 300 мс по сравнению со стандартным методом создания контекста EF (версия 4). Есть ли другой способ сделать это, который имеет лучшую производительность? Это противоречит цели профилирования производительности как таковой.

    public static Models.MyEntities GetContext()
    {
        var profiler = MiniProfiler.Current;
        var sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString);
        var profiledConnection = MvcMiniProfiler.Data.ProfiledDbConnection.Get(sqlConn, profiler);
        return ObjectContextUtils.CreateObjectContext<Models.MyEntities>(profiledConnection);
    }

Этот первый использует вышеуказанную функцию для создания контекста. Второй использует стандартный метод создания контекста EF. Вот разница в производительности при использовании mvc-mini-profiler:

Контекст Profiler EF: 89,1
Некоторые обращения к БД: 317,9

Обычный контекст EF: 0,1
Некоторое обращение к БД: 7,4

ОБНОВЛЕНИЕ 2: я выполнил профилирование в Visual Studio, и похоже, что основной трудоемкой операцией является MvcMiniProfiler.Helpers.StackTraceSnippet.Get(), а внутри нее есть вызов System.Diagnostics.StackTrace..ctor(bool). Это занимает много времени и, по-видимому, является причиной вышеупомянутой задержки.


person WVDominick    schedule 22.06.2011    source источник
comment
Ну, профилировщик (не мини) должен показать вам, в чем проблема, верно?   -  person Craig Stuntz    schedule 22.06.2011
comment
Крейг, я не понимаю, к чему ты клонишь. Контекст профилировщика замедляет работу. Я пытаюсь определить, что я делаю неправильно в своей функции создания контекста.   -  person WVDominick    schedule 22.06.2011
comment
Если вы считаете, что мини-профилировщик замедляет работу, используйте настоящий профилировщик, например встроенный в VS, для диагностики проблемы.   -  person Craig Stuntz    schedule 22.06.2011
comment
Спасибо за предложение, Крейг, но я хочу использовать этот профилировщик, потому что я могу легко добавить его в производственную систему и увидеть живые цифры. Мне просто нравится, как они это сделали. Очень ловко.   -  person WVDominick    schedule 23.06.2011
comment
Я не говорю вам не использовать мини-профайлер. Я предлагаю способ, которым вы могли бы диагностировать проблему, которую он вызывает.   -  person Craig Stuntz    schedule 23.06.2011
comment
Сколько запросов профилируется?   -  person Jarrod Dixon♦    schedule 30.06.2011
comment
Как указано ниже, он замедляется для первого выполненного запроса, а все остальные работают нормально. Это было бы неплохо, но у меня много запросов AJAX, которые открывают отдельные контексты.   -  person WVDominick    schedule 01.07.2011
comment
как только мы это выясним... у нас все будет хорошо каркас сущности профиля"> stackoverflow.com/questions/6613180/   -  person Sam Saffron    schedule 07.07.2011
comment
также .... если кто-нибудь может предоставить отдельное простое решение для воспроизведения, я буду рад рассказать о нем.   -  person Sam Saffron    schedule 09.07.2011
comment
Я считаю, что то, что вызвало это, с тех пор было отремонтировано.   -  person Sam Saffron    schedule 28.08.2011


Ответы (1)


Я отправил набор изменений в профилировщик. это позволяет отключить трассировку стека, поскольку большое количество запросов может повлиять на профилирование.

Просто установите следующую настройку во время запуска приложения:

MiniProfiler.Settings.ExcludeStackTraceSnippetFromSqlTimings = true;
person Jarrod Dixon♦    schedule 30.06.2011
comment
Теперь кажется, что только первый запрос после определения контекста профилировщика выполняется медленно. После выполнения первого оператора LINQ остальные выполняются без замедления. Я вижу, что трассировка стека не выполняется для запросов, но что-то еще замедляет первоначальный запрос. - person WVDominick; 01.07.2011
comment
FWIW, я также наблюдаю резкое замедление. Загрузка страниц увеличивается до 10 секунд, когда у меня включен профилировщик. Я вытащил последний набор изменений, и это, похоже, не улучшило ситуацию. - person jslatts; 02.07.2011
comment
@WVDominick, вы можете снова запустить встроенный профилировщик, чтобы увидеть, где он застрял? - person Sam Saffron; 09.07.2011