代码之家  ›  专栏  ›  技术社区  ›  Vinnie Falco

Visual Studio 2008探查器-检测后会产生奇怪的结果

  •  4
  • Vinnie Falco  · 技术社区  · 16 年前

    我在应用程序的“reldebug”版本上运行了Visual Studio 2008分析器。已启用优化,但内联只是中等程度的,存在堆栈帧,并发出符号。换句话说,reldebug是一个有点优化的构建,可以对其进行调试(尽管通常发布的关于检查变量的警告适用)。

    我在单独的运行中运行采样和检测分析器。

    结果?采样分析器产生的结果看起来是合理的。然而,当我查看被检测的探查器结果时,我看到的函数甚至不应该接近列表的顶部。

    例如,一个类似“setfont”的函数,它只包含一行将高度分配给类成员。或者只分配一个矩形的“setclirect”。

    当然,我在看“独家”统计数据(即负儿童)。

    这发生在其他人身上?当我的应用程序增长到一定的大小时,似乎总是会发生这种情况。它使检测到的分析器在那一点上毫无用处。

    我解决了问题。Visual Studio 2008和Visual Studio 2010分析程序都是平庸的(客气地说)。我买了英特尔C++Studio,它带有VTUNE放大器(一个探查器)。在完全相同的代码上使用“英特尔分析器”,我可以得到真正有意义的分析器结果。

    2 回复  |  直到 13 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    你说“你当然在看排他性”。看看包容性统计。除了最简单的程序或算法外,几乎所有的时间都花在子程序和函数上,所以如果您遇到性能问题,很可能是由您不知道的调用组成的,这些调用占用了大量的时间。

    我所依赖的方法 is this . 假设您试图找出可以解决的问题,使代码更快,它会找到它,而不是浪费时间,用高精度的统计数据来处理那些没有问题的事情。

        2
  •  1
  •   Aleksandar    16 年前

    没有虫子。采样不能告诉你每次通话花费了多少时间。探查器只是计算计时器在该特定函数中结束的次数。由于setfont不是经常调用的,所以在该函数中不会有太多的点击量,并且会让人觉得该函数并不耗时。

    另一方面,当运行检测时,探查器计算每个调用,并测量每个函数的执行时间。这就是为什么您可以获得有关函数CPU消耗的准确信息。

    在检查检测结果时,您必须始终查看调用的数量。因为setfont的API更少,所以它是独占的还是包含的并不重要。唯一重要的是它的整体时间和通话频率。