0

我将 MiniProfiler.Mvc5 v4.2.1 与 C# 一起用于 ASP.NET MVC5 网站。我正在基于源代码存储库中包含的 Samples.Mvc5 项目实现 MiniProfiler,并且在显示 SQL 计时时遇到问题。我很好奇我的设置是否有问题,但我不确定那可能是什么。

这是加载主页的示例,我很困惑为什么 SQL 计时和百分比都显示为 0.0: 图片

但是,如果我真的点击 sql 计时我得到这个视图,这似乎表明每个 SQL 调用确实有与之关联的计时: sql

我用来定义 ProfileDbConnection 和其他相关对象的 DataConnection 类在一个单独的 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);
}

在 MVC 应用程序的 Global.asax.cs 中:

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();
    };
}

任何人都可以帮助指导我为什么我可能没有在初始视图中看到它们聚合,或者我可能会从哪里开始收集更多信息?

4

1 回答 1

0

我不确定为什么 Mini Profiler 会这样,因为我不是这方面的专家。但是,我敢打赌,这是因为 Kentico API 调用在 Kentico 内部使用了它们自己的 DBContext,并且您的 DataConnection 类与 Kentico 的不共享完全相同的上下文。奇怪的是,您确实在个人层面上看到了一些......但是如果没有更多的源代码被共享,这有点难以分辨。

但话虽如此,Kentico 提供了与Glimpse的自动集成。Kentico 的定制版 Glimpse 确实显示了 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 仍然是一个可行的选择。

于 2020-07-26T21:26:49.640 回答