如何获取聚合子项的包容性样本?

5
在VS 2015中,我运行了CPU使用率概要,并看到一个函数(FunctionA)的包含样本为10%。这个函数被其他几个函数(ParentFunctions1、2和3)调用。
当我查看这3个父函数的包含样本时,它们的组合包含样本远远小于子函数B的IS!
我该如何确定哪个父函数导致了最大的使用率?我通常使用以前的分析器,其中父级“CPU时间”是其子级的聚合值。为什么包含样本不像这样工作?我该如何切换到给我实际时间的内容?或者,是否有其他方法可以告诉我哪个是naughty parent?

1
你尝试过类似ANTS性能分析器这样的工具吗?或者给函数添加日志记录呢? - Stevo
1
https://www.red-gate.com/products/dotnet-development/ants-performance-profiler/ - Stevo
嗯,我本以为MSDN自己的分析器应该能够做到这一点。 - ManInMoon
1
你确定是这样吗?也许 FunctionA 被其他东西调用了,而不是 Parent functions 1,2 和 3。如果你能导出性能报告,可能会有人能帮助你解决问题。 - Dipen Shah
2个回答

2
您有使用配置文件,但人们不知道的是 Visual Studio 2015 具有 采样分析方法

Visual Studio 分析工具的采样分析方法会在设定的时间间隔内中断计算机处理器并收集函数调用堆栈。调用堆栈是一种动态结构,存储有关正在处理器上执行的函数的信息。

但请注意要求:

Visual Studio Ultimate、Visual Studio Premium、Visual Studio Professional

它还将为您提供包含式样本:

在目标函数执行期间收集的样本总数。

这包括在直接执行函数代码和在被目标函数调用的子函数执行期间收集的样本。

产生它的步骤:
  • 在 Visual Studio 中打开解决方案。将配置设置为 Release。(在工具栏上找到 Solution Configurations 框,默认情况下设置为 Debug。将其更改为 Release。)
  • 在 Debug 菜单中,选择 Profiler,然后选择 Performance Profiler。
  • 勾选 Performance Wizard 选项,点击 Start。
  • 勾选 CPU Sampling (recommended) 选项,然后点击 Finish。

请注意:

  • 在运行应用程序之后,分析数据的 Summary 视图将出现在主 Visual Studio 窗口中,并在 Performance Explorer 窗口中出现新会话的图标。

  • 如果您不是计算机管理员,则应在使用分析器时以管理员身份运行 Visual Studio。(右键单击 Visual Studio 应用程序图标,然后单击“以管理员身份运行”。

参考此 指南


你好,很抱歉我必须直接使用“CPU采样”。我正在使用Community 2015版本,但性能向导会导致蓝屏(已知问题)。在CPU采样中没有选择“仪器”采样的选项,并且我无法在任何菜单中找到启动性能资源管理器的方法。 - ManInMoon

0

令人困惑的是,在VS2015中,您必须通过Debug/Profiler/Start Profiling菜单而不是Analyze菜单进行操作。

不确定为什么...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接