【问题标题】:Profiler for Windows C++ (console based network application) [closed]Profiler for Windows C++(基于控制台的网络应用程序)[关闭]
【发布时间】:2013-03-12 09:01:46
【问题描述】:

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

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

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

Error Message: Injection of Runtime library failed.

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

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

根据评估,我们也会继续开发商业版的分析器。

非常感谢。

【问题讨论】:

    标签: c++ windows networking console-application profiler


    【解决方案1】:

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

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

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

    【讨论】:

    • 适用于 Windows 的英特尔® VTune™ 放大器 XE
    【解决方案2】:

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

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

    只要找到其中一个,您就会获得一定程度的加速。 就像你只找到 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 倍。

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

    这就是我依赖a manual technique 的原因,因为相对于分析器,它会发现他们发现的所有问题,也会发现他们没有发现的问题。 探查器通常关心外围问题,例如测量的准确性,这无助于发现问题。 如果你想知道为什么,here's the math

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 在我们打算购买之前可以用于评估目的
      • 网站上有评估下载。您可以运行它来了解它是如何运行的,但它不会在评估期间处理您的巨型程序。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多