Могу ли я использовать мини-профайлер mvc в консольном приложении?

Как я могу использовать mvc-mini-profiler в консольном приложении C#?

Также любопытно, помещает ли мини-профилировщик mvc фактическую профилированную статистику в левую часть каждой веб-страницы или это просто пользовательский код javascript, сделанный вручную?

Я загрузил и запустил образец mvc и не могу найти этот код, который помещает результаты во всплывающее окно javascript.


person Blankman    schedule 11.09.2011    source источник


Ответы (3)


Да, ты можешь! И я создал пакет NuGet, чтобы сделать его еще проще.

Ознакомьтесь с MiniProfiler.Windows: http://nootn.github.com/MiniProfiler.Windows/

Также подробная статья о том, как разработать хорошее консольное приложение для профилирования: http://healthedev.blogspot.com.au/2012/07/performance-profiling-console-or-winwpf.html

person nootn    schedule 10.07.2012
comment
Привет, твой пакет nuget отлично работает. Одна маленькая деталь: мне пришлось использовать перенаправление сборки, так как оно зависит от более ранней версии MiniProfiler, чем последняя. Попробуйте обновить свой nuspec, чтобы он зависел от последней версии. Все равно спасибо за старания :) - person Paul Suart; 06.03.2013
comment
Кажется, он несовместим с версией 3.1.1.140. Есть планы исправить? - person Darek; 23.11.2014
comment
@PaulSuart Я столкнулся с следующей ошибкой Method 'Start' in type 'MiniProfiler.Windows.ConsoleProfilingProvider' from assembly 'MiniProfiler.Windows, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation." (System.TypeLoadException) Exception Message = "Method 'Start' in type 'MiniProfiler.Windows.ConsoleProfilingProvider' from assembly 'MiniProfiler.Windows, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an implementation. Как обновить nuspec? В моей папке решения нет файла .nuspec. Версия MiniProfiler 3.1.1.140. - person Abdul Rauf; 02.02.2015

Основной объект синхронизации (MiniProfiler) должен работать нормально, как и перехватчики профилированных соединений и т. д.; однако вам нужно;

  • добавьте свой собственный пользовательский интерфейс, чтобы показать результаты
  • определите свою собственную область/время жизни (для веба это легко - просто http-запрос)
  • предоставить свои собственные крючки для хранения (для этого есть API-интерфейс расширения, который по умолчанию использует http-контекст IIRC)
  • либо передать профилировщик вручную, либо определить разумный способ поиска текущего экземпляра профилировщика

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

person Marc Gravell    schedule 11.09.2011
comment
@Марк ... у вас есть скриншоты того, как это работает? Вы поддерживаете его с последними сборками MiniProfiler? - person Richard B; 05.02.2013
comment
@RichardB, я больше всего сосредоточен на Интернете. У меня нет конкретных примеров сценариев в консоли. - person Marc Gravell; 05.02.2013

MiniProfiler V4 (в настоящее время предварительная версия) имеет метод RenderPlainText(). Вы можете использовать его прямо в консоли или в многопоточном асинхронном серверном приложении без какой-либо дополнительной настройки:

public void Foo()
{
    MiniProfiler.Start("Interesting subroutine");
    using (MiniProfiler.Current.Step("Step1"))
    {
        using (MiniProfiler.Current.Step(nameof(AccessDb)))
        {
            AccessDb();
        }
        Thread.Sleep(100);
    }
    using (MiniProfiler.Current.Step("Step2"))
    {
        Thread.Sleep(100);
    }
    MiniProfiler.Stop();
    Console.WriteLine(MiniProfiler.Current.RenderPlainText());
}

Этот фрагмент кода выводит следующий результат:

PCName на 02.08.2017 8:44:36
Интересная подпрограмма = 309,2 мс
› Step1 = 204,8 мс
›› AccessDb = 103,8 мс (sql = 56,2 мс в 2 cmds)
› Шаг 2 = 100,9 мс

Как видите, выходные данные включают краткую сводку пользовательских таймингов (в данном случае sql). Вы можете легко изменить это поведение (например, включить текст команды), предоставив собственную версию RenderPlainText().

Для получения дополнительной информации проверьте:

person Leonid Vasilev    schedule 02.08.2017
comment
За меня MiniProfiler.Settings.ProfilerProvider = new SingletonProfilerProvider(); сделал работу. Этот бит отсутствует в исходной документации для случая использования COnsoleApp на GitHub. - person sll; 03.05.2018
comment
@sll у вас была какая-то проблема с провайдером по умолчанию? - person Leonid Vasilev; 08.05.2018