Visual studio 2010 VS2010探查器:是否可以探查一种特定方法?

Visual studio 2010 VS2010探查器:是否可以探查一种特定方法?,visual-studio-2010,visual-studio,profiling,profiler,Visual Studio 2010,Visual Studio,Profiling,Profiler,可能有一些方法可以打开和关闭代码分析 或者您可以选择一个特定的函数进行分析吗?不要 你在寻找“瓶颈”,对吗 它可能不在你认为的功能中 如果问题出在该函数中,它会告诉您。如果它在别的地方,它会告诉你 @选民:有什么问题?如果您担心应用程序启动的速度,请在应用程序启动期间手动采样 探查器中的另一种选择是在整个时间段内运行它,然后尝试找出时间线的哪一部分是启动。由于大部分时间都花在用户等待上,所以当您不需要样本时,可以将其置于CPU采样模式。问题是,您看不到加载DLL、查询DNS等花费的I/O时间

可能有一些方法可以打开和关闭代码分析

或者您可以选择一个特定的函数进行分析吗?

不要

你在寻找“瓶颈”,对吗

它可能不在你认为的功能中

如果问题出在该函数中,它会告诉您。如果它在别的地方,它会告诉你


@选民:有什么问题?如果您担心应用程序启动的速度,请在应用程序启动期间手动采样

探查器中的另一种选择是在整个时间段内运行它,然后尝试找出时间线的哪一部分是启动。由于大部分时间都花在用户等待上,所以当您不需要样本时,可以将其置于CPU采样模式。问题是,您看不到加载DLL、查询DNS等花费的I/O时间,这在启动过程中可能占主导地位

然后是整个表现愚蠢的问题,比如“热路”,真正的时间消耗者可以在这里

如果您问“如何检查数千个堆栈样本?”答案是,您不需要。如果创业速度明显缓慢,那是因为它花费了大量时间做一些不需要做的事情——比如说,保守地说,30%。 这意味着您将平均每3.33个样本看到一次。 由于您需要查看两次或更多次才能知道这是一个问题,因此平均需要6.67个样本。 问题越大,你需要的样本就越少。 (如果为90%,则只需要2/0.9=2.2个样本。) 如果你检查20个样本,你会发现任何成本超过10%的问题,如果你解决了它,任何较小的问题都会占更大的百分比-它们会被加速比放大,因此在下一次测试中更容易找到。

是的,只要稍加努力,如果您进行仪器分析(而不是采样),就可以做到这一点:

  • 在Performance Explorer中将二进制/项目添加为目标
  • 在目标上单击鼠标右键,然后单击“属性”
  • 转到Instrumentation部分,取消选中“排除小函数…”
  • 转到“附加检测选项”下的“高级”部分,指定您特别想要分析的方法(例如,
    /包括:ConsoleApp.Program::Main、MyNamespace.MyClass::MyFunc
  • /include
    语法有点奇怪,但是如果启动VS命令提示符并转到二进制文件的目录,则可以运行
    vsinstr.exe/dumpfuncs foo.exe
    查看可以显式包含的方法列表


    有关更多信息,请参阅。

    您还可以使用探查器的数据收集API来启动和停止围绕您感兴趣的方法进行的评测。请参阅以了解演练

    在这种情况下,使用API的最佳方法是在方法执行之前调用
    StartProfile
    ,然后在方法执行之后调用
    StopProfile
    。您应该通过“开始分析暂停”选项开始分析,以便在第一次调用
    StartProfile
    之前不会开始分析


    使用数据采集API将与采样或仪器一起使用。

    有时您只想将范围限制在应用程序的一个特定部分。。。例如,web应用程序启动需要很长时间(只是因为它有很多事情要做),但我想检查启动过程中某个特定部分的行为,即我编写的部分,而不是asp.net应用程序的基础结构执行的代码。@rekna:好的,那么如果您可以在调试器下运行它,请获取堆栈示例。如果你的例行程序在堆栈上的时间少于10%,那么很有可能不值得加速-这是你的决定。如果它在堆栈上的频率高于此值,那么示例将以百分比为基础准确地告诉您它是如何花费时间的(即,它在哪里调用什么,调用什么,等等)。这将直接引导您找到可以加快速度的代码,假设有一些。(通常会有。)@rekna:.net应用程序在启动时往往会做很多胡说八道的事情——你永远猜不到的事情,它们可能在你的代码下,也可能不在你的代码下。加载插件、加载资源、初始化数据结构、加载UI控件、初始化网格,所有这些东西都是因为盲目追求代码而臭名昭著的。我不同意这个建议。有时,您知道应用程序的某个特定部分运行缓慢,而这正是您想要分析的。告诉系统不要对你不感兴趣的代码段进行评测并没有什么错,尤其是因为评测会显著降低程序的执行速度。@zuma:人们不善于猜测问题出在哪里。但这并不重要。即使他们猜测它在哪里,如果他们是对的,样品也会证实它。如果他们错了,样品会告诉他们问题的真正原因。限制探查器注意力的问题是——如果他们错了,他们就无法发现。