如何解决在分析时导致错误热路径的故意等待?

时间:2017-04-21 09:39:48

标签: c# visual-studio visual-studio-2010 profiling

我对分析很陌生,所以我不知道如何处理这个问题。基本上,我想发现为什么UI中出现了一些打嗝。 Profiler似乎是为解决这些问题而制作的,所以我选择了它。我在Windows 8计算机上使用Visual Studio 2010,因此我唯一的选择是检测分析。

不幸的是,我得到的是由于MessageBox.Show调用和长时间运行的线程等待Monitor.Wait的数据而导致的一系列令人分心的热路径。当然,这些方法比我试图理解的问题要长几个数量级。

有没有办法过滤掉这些长时间运行的方法?理想情况下,按功能名称或其他一些标准,也许是过去的独占时间。

2 个答案:

答案 0 :(得分:1)

分析不适用于UI。分析用于计算和其他逻辑。如果您确实需要配置UI(您不应该),您可以隐藏消息框并模拟按钮点击。类似的东西:

#if PROFILE_VERSION
    DialogResult result = DialogResult.OK;
#else
    DialogResult result = MessageBox.Show();
#endif

当然,您需要定义PROFILE_VERSION并为此创建新配置。

但实际上,你应该只测试你的逻辑。

答案 1 :(得分:0)

hot paths being some of the pointless information profilers give you之外,以下是我如何找到你的“打嗝”。

我大部分时间都使用random pausing。 我试着在缓慢的时间(“打嗝”)收集样本,这样我就可以看到它在那段时间里正在做什么。 如果我得到的样本我认为不相关,我就会忽略它们。

如果打嗝发生得太快而无法做到这一点,那就是一种更难的方法。 它需要使用处理程序设置几毫秒的定时器中断。 当可疑代码启动时,它启用计时器,当它完成时它会禁用计时器。 这样,如果完成时间比正常时间长,计时器就会熄灭。如果我在处理程序中设置了一个断点,我可以查看当计时器关闭时程序正在做什么。 这是一种获取样本的方法。 如果我得到几个样本,这通常足以显示问题。