Asp.net mvc 3 MVC迷你探查器-手动添加步骤

Asp.net mvc 3 MVC迷你探查器-手动添加步骤,asp.net-mvc-3,mvc-mini-profiler,Asp.net Mvc 3,Mvc Mini Profiler,我有很多小动作(每页10-30个),它们是递归调用的一部分,所以我不能简单地将它们作为分析器中的一个步骤来计算。当我只需要总数时,我得到了30个短而不同的计数器 是否有一种简单而直接的方法可以手动向mini profiler添加步骤?或者让它用相同的名字总结步骤 此外,是否有可能以某种方式将文本信息放在那里,而不仅仅是时间 您希望将递归调用“包装”到using语句中。大概是这样的: using (profiler.Step("Step A")) { // somethi

我有很多小动作(每页10-30个),它们是递归调用的一部分,所以我不能简单地将它们作为分析器中的一个步骤来计算。当我只需要总数时,我得到了30个短而不同的计数器

是否有一种简单而直接的方法可以手动向mini profiler添加步骤?或者让它用相同的名字总结步骤

此外,是否有可能以某种方式将文本信息放在那里,而不仅仅是时间

您希望将递归调用“包装”到using语句中。大概是这样的:

using (profiler.Step("Step A"))
    { 
        // something recursive here
        Thread.Sleep(100);
    }
“步骤A”将是您的呼叫总数。在using语句中,你可以做任何你想做的事情。“步骤A”可以是您想要的任何信息。您可以将任何字符串值放入其中,它将显示在探查器中。您还可以通过只执行一个“步骤”来添加简单的文本信息,而无需使用

MiniProfiler.Current.Step("Some code after this");

这将只在分析器输出窗口中插入一行。我用它来抛出异常或其他调试信息

我也需要这个,所以我做了这个小东西。它工作得很好。 MiniProfiler中的许多有用属性都是内部的或类似的,因此有些代码是从MiniProfiler源代码复制的。还要注意的是,因为它是用于内部循环的,所以它不会舍入到1/10毫秒

public class GroupTiming : IDisposable
{
    private Timing _timing;
    private MiniProfiler _profiler;
    private readonly Stopwatch _sw;

    public GroupTiming( MiniProfiler profiler, Timing timing )
    {
        _timing = timing;
        _profiler = profiler;
        _profiler.Head = _timing;
        _sw = new Stopwatch();
        _sw.Start();
    }

    public void Dispose()
    {
        _timing.DurationMilliseconds += (decimal)(1000*_sw.ElapsedTicks) / (decimal)Stopwatch.Frequency;
        _profiler.Head = _timing.ParentTiming;
    }
}

public static class MiniProfilerExtensions
{
    public static IDisposable StepGroup( this MiniProfiler profiler, string name )
    {
        return profiler == null ? null : profiler.StepGroupImpl( name );
    }

    private static IDisposable StepGroupImpl( this MiniProfiler profiler, string name )
    {
        Timing timing = null;

        if( profiler.Head.Children != null )
        {
            timing = profiler.Head.Children.SingleOrDefault( _ => _.Name == name );
        }

        if( timing == null )
        {
            using( timing = new Timing( profiler, profiler.Head, name ) ) { }
        }

        return new GroupTiming( profiler, timing );
    }
}

我不想把整个过程都包装起来,我只想测量递归方法中的特定代码段运行所需的时间。我想我可以自己测量一下,然后在步骤名称中添加一个带有计时的步骤。。。但是,它总是会在琐碎的部分,有错误的时间,等等。。。我希望有一个干净的方法来做这件事我今天玩了一会儿,但我找不到一个干净的方法来做你想做的事。您可以通过子项手动设置计时的持续时间,但它会扰乱嵌套层次结构和实际持续时间。根据我的测试,它无论如何都会出现在“琐碎”部分,因为它的持续时间是负数。我建议在此处将其作为功能请求提交: