1

我有一个方法,其中包含在使用 MiniProfiler 时我想从分析中忽略的部分代码。

从文档中可以看出,执行此操作的扩展方法是.Ignore(),当在using语句中使用时,应在持续时间内禁用分析。

不幸的是,我没有得到预期的结果。假设我有这个方法结构:

public async Task<IActionResult> FirstMethod()
{
    using (MiniProfiler.Current.Step("FirstMethod"))
    {
        IActionResult result = this.SecondMethod();
        
        using (MiniProfiler.Current.Ignore())
        {
            Thread.Sleep(100); 
        }

        return result;
    }
}

internal virtual IActionResult SecondMethod()
{
    using (MiniProfiler.Current.CustomTiming("SQL", "QuerySecondMethod"))
    {
        // Some data logic
    }
}

我所期望的是,在分析器上,FirstMethod步骤持续时间和SecondMethod自定义时间将大致相同,因为FirstMethod只调用SecondMethod并忽略Thread.Sleep().

但是我不断得到FirstMethod持续时间比 100 毫秒长SecondMethod,这使得它看起来Ignore并没有真正禁用其中代码的探查器。

我究竟做错了什么?我是否误解了该Ignore方法的文档和目的?

4

1 回答 1

0

.Ignore()方法是为了抑制其中的代码,而不是整体。

如果您想停止并丢弃分析器,您的选择是:

MiniProfiler.Current.Stop(discardResults: true);

有关更多详细信息,您可以在 github中查看此问题。

于 2022-02-14T08:59:34.420 回答