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

第一个是使用上面的函数来创建上下文。第二种是使用标准的 EF 上下文创建方法。以下是使用 mvc-mini-profiler 的性能差异:

Profiler EF 上下文:89.1
一些数据库命中: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 回答