9

以下の関数を使用してコンテキストを作成すると、プロファイラーは標準の EF (バージョン 4) コンテキスト作成方法から約 300 ミリ秒増加したことを示します。これを行う別の方法でパフォーマンスが向上する方法はありますか? このままでは、パフォーマンス プロファイリングの目的が無効になります。

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

この最初のものは、上記の関数を使用してコンテキストを作成しています。2 つ目は、標準の EF コンテキスト作成方法を使用することです。mvc-mini-profiler を使用した場合のパフォーマンスの違いは次のとおりです。

プロファイラー EF コンテキスト: 89.1
一部の DB ヒット: 317.9

通常の EF コンテキスト: 0.1
一部の DB ヒット: 7.4

更新 2: Visual Studio でいくつかのプロファイリングを行いましたが、主な時間のかかる操作は MvcMiniProfiler.Helpers.StackTraceSnippet.Get() であり、その中に System.Diagnostics.StackTrace..ctor(bool) への呼び出しがあるようです。これは完了するまでに長い時間がかかり、上記の遅延の原因と思われます。

4

1 に答える 1

5

多くのクエリがプロファイリングに影響を与える可能性があるため、スタック トレースを無効にできる変更セットをプロファイラーにプッシュしました。

アプリケーションの起動時に次の設定を行うだけです。

MiniProfiler.Settings.ExcludeStackTraceSnippetFromSqlTimings = true;
于 2011-06-30T02:27:41.613 に答える