【问题标题】:Slow EF profiling performance with mvc-mini-profiler使用 mvc-mini-profiler 降低 EF 分析性能
【发布时间】:2011-06-22 12:29:12
【问题描述】:

当我使用以下函数创建上下文时,分析器显示比标准 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
一些数据库命中:7.4

更新 2: 我在 Visual Studio 中进行了一些分析,看起来主要耗时的操作是 MvcMiniProfiler.Helpers.StackTraceSnippet.Get(),其中调用了 System.Diagnostics.StackTrace..ctor(bool)。这需要很长时间才能完成,并且似乎是上述延迟的原因。

【问题讨论】:

  • 嗯,(非迷你)分析器应该会告诉你问题出在哪里,对吧?
  • 克雷格,我不确定你在说什么。探查器上下文正在减慢速度。我正在尝试确定我在上下文创建功能中是否做错了。
  • 如果您认为迷你分析器让事情变慢,请使用真正的分析器(例如 VS 内置的分析器)来诊断问题。
  • 正在分析多少个查询?
  • 一旦我们弄清楚了......我们会很好stackoverflow.com/questions/6613180/…

标签: entity-framework asp.net-mvc-3 profiling mvc-mini-profiler


【解决方案1】:

我推送了一个changeset to the profiler,它允许禁用堆栈跟踪,因为大量查询可能会影响分析。

只需在应用程序启动期间设置以下设置:

MiniProfiler.Settings.ExcludeStackTraceSnippetFromSqlTimings = true;

【讨论】:

  • 现在看来,只有定义分析器上下文后的第一个查询运行缓慢。在执行第一个 LINQ 语句后,其余部分不会减速。我可以看到堆栈跟踪没有在查询上执行,但其他东西似乎正在减慢初始查询的速度。
  • FWIW,我也看到了急剧的减速。当我启用分析器时,页面加载时间会飙升至 10 秒。我提取了最新的更改集,但似乎并没有改善。
  • @WVDominick 你能再次运行内置分析器看看卡在哪里吗?
猜你喜欢
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多