使用 mvc mini profiler 的每个操作的阈值计时

Posted

技术标签:

【中文标题】使用 mvc mini profiler 的每个操作的阈值计时【英文标题】:Threshold timing per operation using the mvc mini profiler 【发布时间】:2012-10-24 05:55:55 【问题描述】:

这是我面临的场景:我正在使用 MiniProfiler 来分析一些操作。但它缺少我必须使用的特定功能。有一个设置文件 MiniProfiler,它可以让我做一些配置,比如什么要考虑进行分析,什么不考虑,什么考虑慢,什么不考虑等等。但这些是全局设置,适用于所有被分析的操作。我需要的是能够说这样的话:

using (mvcminiprofiler.Step("OperationName", 1200)

    //some C# code 

此参数“1200”表示此操作预计需要 1200 毫秒,如果时间小于或等于 1200 毫秒,则不将其结果保存到数据库中。但是如果需要超过 1200 毫秒,则将此响应时间保存到数据库中。所以我基本上是在谈论每个操作的阈值。

我愿意为此编写 MiniProfiler 的包装器,但我不愿意更改 mini Profiler 源代码。实际上,我们已经围绕迷你分析器构建了一个小框架,但我们不想更改它的源代码。但只是在某些方面扩展它的功能。

【问题讨论】:

这很棘手,您需要以某种方式将此信息流入 IStorage,然后请 Jarrod 看看 拜托 :) 这是有道理的,因为我们想要分析并且不会实时影响站点的某些操作可能需要大量时间。因此,将操作级别阈值时间与全局阈值分开是有意义的。谢谢! 不是覆盖.Step(),而是.StepIf("Operation", 1200) 呢? 也有道理。任何让我们有操作级别阈值的东西:) @JarrodDixon - 我们对此有任何更新吗? 【参考方案1】:

我刚刚向 MiniProfiler 添加了以下新的扩展方法,在 nuget 3.0.10-beta5 及更高版本中可用:

    MiniProfiler.StepIf(string name decimal minSaveMs, bool includeChildren = false) MiniProfiler.CustomTimingIf(string category, string commandString, deciml minSaveMs, string executeType = null)

你应该能够使用这些来完全做你想做的事情。在你的情况下,你会使用这样的代码:

using (MiniProfiler.Current.StepIf("Operation Name", 1200)) 
  // do your stuff

您可以使用includeChildren(默认为false)设置在确定是否保存此CustomTiming时是否使用子配置文件中记录的时间。

this GitHub Issue 中的更多信息。

【讨论】:

以上是关于使用 mvc mini profiler 的每个操作的阈值计时的主要内容,如果未能解决你的问题,请参考以下文章

MVC-Mini-Profiler - Web 表单 - 找不到 /mini-profiler-results

是否可以将 mvc-mini-profiler 与类型化数据集一起使用?

mvc-mini-profiler 减慢实体框架

为 EF-db- first 设置 mvc-mini-profiler

Stack Overflow的Mini Profiler [关闭]

MVC OnResultExecuting 性能问题