MiniProfiler无法显示SqlTimings

时间:2011-11-22 11:37:52

标签: mvc-mini-profiler

我正在使用MiniProfiler来配置我的MVC应用程序和WCF服务,这有点像一个警告 - 当个人资料信息包含sql时。

症状:

  1. 弹出窗口中缺少“查询时间(毫秒)”标题
  2. 弹出窗口底部缺少“sql中的%”
  3. 如果我点击“sql”链接,它会显示灰色叠加但没有信息并抛出一些jQuery错误(它找不到该元素)。
  4. 经过一番挖掘,我发现这与json响应中的 HasSqlTimings 有关,json响应的根目录中的HasSqlTimings(false)与其中的信息之间存在不一致。 Root / Children层次结构(true)。

    [OnDeserialized]
    void OnDeserialized(StreamingContext ctx)
    {
        HasSqlTimings = GetTimingHierarchy().Any(t => t.HasSqlTimings);
        HasDuplicateSqlTimings = GetTimingHierarchy().Any(t => t.HasDuplicateSqlTimings);
    
        if (_root != null)
        {
            _root.RebuildParentTimings();
        }
    }
    

    我看了一下源代码,它看起来应该可以正常工作但没有交易!有谁知道我可能会出错?

1 个答案:

答案 0 :(得分:0)

实施时我遇到了同样的问题。当UI层不进行任何sql调用但随后WCF数据返回sql调用时,会出现此问题。根时间不知道层次结构中有下面的SQL时序。

我添加了一行,以便在添加“远程”时序时,我们设置“hasSqlTimings”字段,以便UI知道如何正确渲染框。这是我在MvcMiniProfiler \ MiniProfiler.cs中修改的代码:

/// <summary>
/// Adds <paramref name="externalProfiler"/>'s <see cref="Timing"/> hierarchy to this profiler's current Timing step,
/// allowing other threads, remote calls, etc. to be profiled and joined into this profiling session.
/// </summary>
public static void AddProfilerResults(this MiniProfiler profiler, MiniProfiler externalProfiler)
{
   if (profiler == null || externalProfiler == null) return;
   profiler.Head.AddChild(externalProfiler.Root);
   profiler.HasSqlTimings = profiler.GetTimingHierarchy().Any(t => t.HasSqlTimings);
}