Тайминги SQL MiniProfiler MVC не отображаются

Я использую MiniProfiler.Mvc5 v4.2.1 с C # для веб-сайта ASP.NET MVC5. Я реализую MiniProfiler на основе проекта Samples.Mvc5, включенного в репозиторий исходного кода, и у меня возникла проблема с отображением таймингов SQL. Мне любопытно, может быть, что-то не так в моей настройке, но я не совсем уверен, что это может быть.

Вот пример загрузки домашней страницы, и я не понимаю, почему время и процент SQL отображаются как 0,0:  image

Однако, если я действительно нажимаю на тайминги sql, я получаю это представление, которое, похоже, указывает на то, что каждый вызов SQL имеет связанные с ним тайминги:  sql

Класс DataConnection, который я использую для определения ProfileDbConnection и других связанных объектов, находится в отдельном CSPROJ, вот некоторые соответствующие методы настройки:

/// <summary>
/// Creates a new native connection
/// </summary>
protected override IDbConnection CreateNativeConnection()
{
    var connection = new SqlConnection(ConnectionString);
    return new ProfiledDbConnection(connection, MiniProfiler.Current);
}

/// <summary>
/// Creates a new SQL command
/// </summary>
/// <param name="cmdText">Command text</param>
protected override DbCommand CreateCommand(string cmdText)
{
    var command = new SqlCommand(cmdText, null, (SqlTransaction)Transaction);
    return new ProfiledDbCommand(command, (DbConnection)NativeConnection, MiniProfiler.Current);
}

/// <summary>
/// Creates a new command parameter
/// </summary>
/// <param name="name">Parameter name</param>
/// <param name="value">Parameter value</param>
protected override DbParameter CreateParameter(string name, object value)
{
    return new SqlParameter(name, value);
}

/// <summary>
/// Creates a data adapter
/// </summary>
protected override DbDataAdapter CreateDataAdapter()
{
    return new ProfiledDbDataAdapter(new SqlDataAdapter(), MiniProfiler.Current);
}

В Global.asax.cs приложения MVC:

public MvcApplication()
{
    AuthenticateRequest += (sender, e) =>
    {
        var app = (HttpApplication) sender;
        if (Request.IsLocal || app.User != null && app.User.Identity.IsAuthenticated && app.User.Identity.Name == "administrator")
        {
            MiniProfiler.StartNew();
        }
    };
    EndRequest += (sender, e) =>
    {
        MiniProfiler.Current?.Stop();
    };
}

Может ли кто-нибудь помочь мне объяснить, почему я не вижу их агрегированных в первоначальном представлении или где я могу начать искать дополнительную информацию?


person Jon Knopp    schedule 15.07.2020    source источник


Ответы (1)


Я не совсем уверен, почему Mini Profiler так себя ведет, поскольку я не эксперт в этом. Однако я бы поспорил, потому что вызовы Kentico API используют свой собственный DBContext внутри Kentico, а ваш класс DataConnection не имеет того же точного контекста, что и Kentico. Странно то, что вы действительно видите некоторые из них на индивидуальном уровне ... Но это довольно сложно сказать, не имея общего доступа к исходному коду.

Но с учетом сказанного, Kentico предлагает автоматическую интеграцию с Взгляд. Специальная версия Glimpse от Kentico показывает тайминги SQL и многие другие параметры профилирования. Посмотрите мой блог о том, как это использовать. https://www.mcbeev.com/Blog/January-2018/Why-Kentico-Glimpse-is-a-Must-Have-Tool-for-Kentico-MVC-Developers и последующий пост о добавлении дополнительной информации об отладке памяти на https://www.mcbeev.com/Blog/September-2019/KenticoCacheDoctor-2-Now-With-Kentico-Glimpse.

Я думаю, что в мире MVC5 Glimpse все еще является жизнеспособным вариантом.

person Mcbeev    schedule 26.07.2020