0

ASP.NET MVC5 Web サイトの C# で MiniProfiler.Mvc5 v4.2.1 を使用しています。ソース コード リポジトリに含まれている 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 に答える