Visual Studio 2008 Profiler - Instrumented 产生奇怪的结果

Vin*_*lco 5 c++ profiler visual-studio

我在应用程序的“RelDebug”版本上运行 Visual Studio 2008 探查器。优化已开启,但内联程度适中,存在堆栈帧,并且发出符号。换句话说,RelDebug 是一个可以调试的、经过一定程度优化的构建(尽管有关检查变量的常见发行版警告适用)。

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

结果?采样分析器产生的结果看起来很合理。然而,当我查看 Instrumented Profiler 结果时,我发现一些函数甚至不应该出现在列表顶部附近。

例如,像“SetFont”这样的函数仅由 1 行组成,用于将高度分配给类成员。或仅分配一个矩形的“SetClipRect”。

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

这发生在其他人身上吗?一旦我的应用程序增长到一定规模,这种情况似乎总是会发生。这使得仪表分析器在此时毫无用处。

我解决了这个问题。Visual Studio 2008 和 Visual Studio 2010 分析器都表现平平(委婉地说)。我购买了 Intel C++ Studio,它附带 vTune Amplifier(分析器)。在完全相同的代码上使用英特尔分析器,我能够获得真正有意义的分析器结果。

Mik*_*vey 2

你说“你当然在看Exclusive”。查看包容性统计数据。在除了最简单的程序或算法之外的所有程序或算法中,几乎所有时间都花费在子例程和函数中,因此如果您遇到性能问题,它很可能由您不知道是浪费时间的调用组成。

我依赖的方法是这个。假设您正在尝试找出可以修复的内容以使代码更快,它会找到它,同时不会浪费您的时间来对不存在问题的事情进行高精度统计。

  • 我的意思是,在任何情况下都不应该出现在顶部的函数出现在顶部。这似乎是 Instrumented profiler 中的一个错误。采样分析器可生成更准确、更有意义的结果。我已经优化了大部分可以优化的内容,而无需进行算法更改(我的应用程序运行良好)。我想使用仪器分析器来找出导致我的应用程序在使用 OpenMP 和调试器时速度变慢的原因(没有附加调试器,应用程序不会变慢),但是来自仪器分析器的错误结果正在进入方式。 (2认同)