我正在使用带有ASP.NET MVC 4的StackExchange Miniprofiler。我目前正在尝试使用昂贵的表达式来分配类的成员变量,该表达式生成要分配的值。 Miniprofiler似乎不想描述赋值语句。我简化了我的代码以突出显示错误:
public ActionResult TestProfiling()
{
var profiler = MiniProfiler.Current;
using (profiler.Step("Test 1"))
Thread.Sleep(50);
int sue;
using (profiler.Step("Test 2"))
{
sue = 1;
}
if (sue == 1)
sue = 2;
using (profiler.Step("Test 3"))
{
Thread.Sleep(50);
int bob;
using (profiler.Step("Inner Test"))
{
bob = 1;
}
if (bob == 1)
bob = 2;
}
return View();
}
N.B。 if语句只是为了避免编译器警告。
测试1和测试3显示在结果页面的Miniprofiler部分中。测试2和内部测试没有。但是,如果我用sleep语句替换Test 2或Inner Test的内容,它们会输出到结果页面。
这里发生了什么?即使我在一个不出现的测试中替换了简单的赋值语句,即
using (profiler.Step("Test 2"))
{
ViewModel.ComplexData = MyAmazingService.LongRunningMethodToGenerateComplexData();
}
使用更复杂的一个,测试2步仍然无法输出到渲染的Miniprofiler部分。为什么不使用Miniprofiler分析赋值语句?
编辑:代码示例现在对应于文本。
Edit2 :在进一步挖掘之后,似乎问题不在于赋值语句。看来输出结果中是否显示某些内容取决于执行所需的时间。即。
using (profiler.Step("Test 2"))
{
sue = 1;
Thread.Sleep(0);
}
使用上述代码,Miniprofiler结果中不显示测试2。
using (profiler.Step("Test 2"))
{
sue = 1;
Thread.Sleep(10);
}
使用上面的代码测试2现在显示在Miniprofiler结果中。
所以看起来我的LongRunningCodeToGenerateComplexData变得非常快......但Miniprofiler的预期行为是不显示花费很少时间的步骤?
答案 0 :(得分:2)
只需点击探查器结果右下角的“显示琐事”即可。
这应该显示所有较小的行为
答案 1 :(得分:0)
似乎问题是Miniprofiler没有显示执行时间少于3ms的步骤的结果。
编辑:来自Miniprofiler文档。
TrivialDurationThresholdMilliseconds任何持续时间小于或等于此的定时步骤将默认隐藏在UI中;默认为2.0毫秒。
http://community.miniprofiler.com/permalinks/20/various-miniprofiler-settings