我们开发了基于Windows C ++控制台的网络密集型应用程序,在数据通信期间似乎很慢。
代码库很大,所以我正在寻找一个可以指向特定功能/代码行的分析器工具,这些代码是整体性能的瓶颈。
我尝试使用VS 2010中提供的“性能工具”,但是当我运行以分析应用程序时它崩溃了。
Error Message: Injection of Runtime library failed.
另外,我尝试使用Very Sleepy,但我看不到我的功能,可能是因为它无法指向源代码(但不确定,可能是我可能没有正确使用它)
有人可以为基于Windows C ++控制台的应用程序推荐一些免费的免费分析器吗?
根据评估,我们也会继续使用profiler的商业版本。
非常感谢提前。
答案 0 :(得分:4)
如果您使用的是基于Intel的机器,我会使用VTune。如果它在AMD机器上,CodeAnalyst就是类似的产品。
我相信VTune可以通过试用许可证获得。 CodeAnalyst是免费提供的。
这些工具不是基于控制台的,但它们可用于分析基于控制台的应用程序。
答案 1 :(得分:1)
可能存在一些“问题”,或者使其更快的方法。 我不会称它们为“瓶颈”,因为它们通常不是本地化的。 通常它们是非常好的代码 - 它们从未被认为是在“关键路径”上。
假设问题在修复后会保存这些百分比:
只是找到其中一个会给你一定的加速。 就像你刚刚找到A一样,这会给你1 /(1-0.3)= 1.43或43%的加速。 如果你这样做,你可以像大多数人一样快乐并停下来。 但是,如果你继续并且也找到了B,你的总加速将是1 /(1-0.51)= 2.04或104%。 即使B小于A,这仍然超过43%。 修复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。
答案 2 :(得分:0)
我们的C++ Profiler工具应该有效。
它不关心您的应用程序如何进行I / O(例如,“基于控制台”)。它处理大量文件系统。它还处理C ++的GNU和MS方言,以及C ++ 11。
商业。 (我怀疑你会发现一个适用于MS Visual C ++的免费探查器。)