【发布时间】:2011-02-15 02:39:12
【问题描述】:
可能有一些方法可以从代码中打开和关闭分析?
或者你可以选择一个特定的功能来分析?
【问题讨论】:
标签: visual-studio-2010 visual-studio profiling profiler
可能有一些方法可以从代码中打开和关闭分析?
或者你可以选择一个特定的功能来分析?
【问题讨论】:
标签: visual-studio-2010 visual-studio profiling profiler
是的,如果您进行仪器分析(不是采样),只需稍加努力,您就可以做到这一点:
/include:ConsoleApp.Program::Main,MyNamespace.MyClass::MyFunc)/include 语法有点奇怪,但如果您启动 VS 命令提示符并转到二进制目录,则可以运行 vsinstr.exe /dumpfuncs foo.exe 以查看可以显式包含的方法列表。
请参阅vsinstr.exe command-line syntax 了解更多信息。
【讨论】:
不要。
您正在寻找“瓶颈”,对吗?
它可能不在你认为的函数中。
This is the method I rely on, for any language or OS.
如果问题出在那个函数上,它会告诉你。如果它在其他地方,它会告诉你。
@downvoter:有什么问题?如果您担心应用程序启动的速度,请在应用程序启动过程中手动采样。
分析器中的替代方法是在整个时间内运行它,然后尝试找出时间线的哪一部分是启动。而且由于大部分时间都花在了用户等待上,所以当您不需要样本时,您可以将其置于 CPU 采样模式。这样做的问题是,您看不到诸如加载 dll、查询 DNS 等所花费的 I/O 时间之类的东西,这些在启动期间可能占主导地位。
然后是整个演示愚蠢问题,例如“热路径”,真正的耗时者可以easily hide。
如果您问“我如何检查数千个堆栈样本?”答案是您不需要。如果启动速度明显缓慢,那是因为它花费了很大一部分时间做一些它不需要做的事情——保守一点,比如 30%。 这意味着您平均每 3.33 个样本就会看到一次。 由于您需要查看两次或更多次才能知道这是一个问题,因此平均需要 6.67 个样本。 问题越大,您需要的样本就越少。 (如果是 90%,你只需要 2/0.9 = 2.2 个样本。) 如果你检查 20 个样本,你会发现任何问题的成本超过 10%,如果你修复它,任何较小的问题都会占据更大的百分比——它们会被加速比放大,所以下次更容易找到它们-大约。 Here's the math.
【讨论】:
您还可以使用分析器的数据收集 API 来开始和停止围绕您感兴趣的方法进行分析。请参阅 this MSDN article 了解演练。
在这种情况下,使用 API 的最佳方式是在方法执行之前调用 StartProfile,然后在之后调用 StopProfile。您应该通过“Start With Profiling Paused”选项开始进行分析,这样在第一次调用StartProfile 之前不会开始分析。
使用数据收集 API 将与采样或检测一起使用。
【讨论】: