我知道我可以在Linux上用gprof
和kprof
来分析我的代码。 在Windows上有这些应用程序可供select吗?
商业软件:
免费软件:
这些商业的替代方案通过“测试”(添加指令)来改变编译后的代码,并根据添加的指令执行时序。 这意味着他们会导致您的应用程序严重放缓。
这些免费的替代品使用抽样,这意味着他们不太详细,但速度非常快。 在实践中,我发现尤其是Very Sleepy非常适合快速查看应用程序中的性能问题。
有一个gprof的MinGW端口,与Linux版本的工作方式大致相同。 你可以得到一个完整的MinGW安装 (我认为gprof是包括但不是确定的),或者从MinGW binutils包得到gprof。
对于Eclipse,有TPTP,但据我所知,它不支持分析C / C ++。
是的,你可以使用Visual Studio剖析代码
分析的原因是什么? 你想a)测量时间,并得到一个调用图,或b)找到改变的东西,使代码更快? (这些不一样。)
如果(b)你可以使用这个技巧 ,使用Eclipse中的暂停按钮。
补充说:也许这将有助于传达一些性能问题实际上是什么样的经验,以及在哪里可以找到它们。 这里有一些简单的例子:
插入排序(order n ^ 2),其中被排序的项目是字符串,并通过字符串比较函数进行比较。 热点在哪里? 在字符串比较。 哪里有问题? 在调用字符串比较的排序中。 如果n = 10,这不是问题,但如果n = 1000,突然需要很长时间。 字符串比较被称为“冷”,但这是问题的地方。 调用堆栈的少量样本可以确定地确定它的位置。
加载插件的应用程序需要很长时间才能启动。 分析人员说,基本上所有的东西都是“冷”的。 一些衡量I / O时间的东西说这几乎是所有的I / O时间,这看起来就像你所期望的那样,所以它可能看起来没有希望。 但是,为了将字符串常量翻译为本地语言,在读取插件dll的资源部分的过程中,堆栈样本显示大部分时间花费在堆栈的大约20层。 进一步调查,你会发现被翻译的大部分字符串并不是真正需要翻译的那种。 他们只是放在“万一”他们可能需要翻译,并没有被认为是可能导致性能问题的东西。 解决这个问题带来了大量的时间节省。
因此,通常以“热点”和“瓶颈”来考虑,但是大多数程序,特别是大型程序,往往会以功能调用的形式存在性能问题,而这些功能调用并不需要完成。 幸运的是,他们在消费时间内将自己展示在通话堆栈上。