1

我们开发了一个基于 Windows C++ 控制台的网络密集型应用程序,它在数据通信期间似乎很慢。

代码库很大,所以我正在寻找一个分析器工具,它可以指向特定的函数/代码行,这些函数/代码行是整体性能的瓶颈。

我尝试使用 VS 2010 中提供的“性能工具”,但在我运行以分析应用程序时它崩溃了。

Error Message: Injection of Runtime library failed.

另外,我尝试使用非常困,但我看不到我的函数,可能是因为它无法指向源代码(但不确定,可能是我可能没有正确使用它)

有人可以为基于 Windows C++ 控制台的应用程序推荐一些好的免费分析器吗?

根据评估,我们也将继续进行分析器的商业版本。

提前谢谢了。

4

3 回答 3

4

如果您使用的是基于 Intel 的机器,我会使用 VTune。如果它在 AMD 机器上,CodeAnalyst 就是类似的产品。

我相信 VTune 可以通过试用许可证获得。CodeAnalyst 是免费提供的。

这些工具不是基于控制台的,但它们可以用于分析基于控制台的应用程序。

于 2013-03-12T09:07:40.527 回答
1

可能有几个“问题”,或者让它更快的方法。我不会称它们为“瓶颈”,因为它们通常没有本地化。通常它们是非常好的代码——只是从来没有想过它们会在“关键路径”上。

假设问题在解决后会节省这些百分比:

在此处输入图像描述

只需找到其中一个即可为您提供一定程度的加速。就像你只找到 A 一样,这会给你 1/(1-0.3) = 1.43 或 43% 的加速。如果你这样做了,你就可以像大多数人一样开心并停下来。但是,如果您继续并找到 B,您的总加速将是 1/(1-0.51) = 2.04 或 104%。这比 43% 多得多,尽管 B 比 A 小。固定 C 可以让您快 2.92 倍,而 D 可以让您快 4.2 倍。

什么?解决较小的问题有更高的回报?他们可以,因为加速因素复合。按该顺序固定 A 和 B 得到 1.43 * 1.43 = 2.04。如果你碰巧以相反的顺序修复它们,你会得到 1.27 * 1.61 = 2.04

每次你修复某个问题时,其他问题就会变得更大,按百分比计算并且更容易找到,并且加速累积就像高收益投资一样。当你修复 A、B、C、D 和 E 时,剩下的就是 F,不是 5%,而是 30%。修复所有问题,现在您的速度提高了 8.5 倍!但是,如果你错过了一个,比如 D,因为你的分析工具没有暴露它,你的速度只有 4.5 倍。

这就是你没有发现问题所付出的代价。

这就是我依赖手动技术的原因,因为相对于分析器,它会发现他们发现的所有问题,并且会发现他们没有发现的问题。Profiler 经常关心外围问题,例如测量的准确性,这无助于发现问题。如果你想知道为什么,这里是数学

于 2013-03-12T12:47:49.640 回答
0

我们的C++ Profiler工具应该可以工作。

它不关心您的应用程序如何进行 I/O(例如,“基于控制台”)。它处理庞大的文件系统。它还处理 C++ 的 GNU 和 MS 方言,以及 C++11。

商业的。(我怀疑你会找到适用于 MS Visual C++ 的免费分析器)。

于 2013-03-12T09:29:59.907 回答