什么是非常简单的C++探查器(VC++)?

Mr.*_*Boy 14 c++ profiling visual-c++

我过去曾经使用过一些分析器,但从未发现它们特别容易.也许我挑选了不好的,也许我真的不知道我在期待什么!但是我想知道是否有任何"标准"分析器只是简单地投入使用?我不相信我需要大量详细的报告,只是为了获取主要的黑点.在这一点上,易用性对我来说更重要.

这是我们正在使用的VC++ 2008(我亲自运行标准版).我不认为IDE中有任何工具,看不到主菜单我看不到任何工具?

Mic*_*ers 24

我建议一个非常简单的方法(我从阅读Mike Dunlavey关于SO的帖子中学到的):

只是暂停程序.

做几次以获得合理的样本.如果一个特定的函数占用了程序执行时间的一半,那么很有可能你很快就会抓住它.

如果您将该功能的性能提高50%,那么您只需将总体执行时间提高25%.如果你发现它根本不需要它(我在短时间内发现了几个这样的情况,我一直在使用这种方法),你只需将执行时间缩短一半.

我必须承认,起初我对这种方法的功效持怀疑态度,但在尝试了几周之后,我就迷上了.

  • ++是的,我担心我自己制作了一种传播这种技术的皇家虫害,但是它很有用,它有效.(重要的是要看一下调用堆栈.有时候人们会说"这是在一些系统例行程序中 - 这有什么用处?"当问题显而易见时会出现几个级别.) (10认同)

Bri*_*ndy 12

VS内置:

如果您有团队版,则可以使用Visual Studio分析器.


其他选择:

否则检查此线程.


轻松创建自己的:

我个人使用基于Win32 API QueryPerformanceCounter的内部构建的.您可以在一百行或更少的代码中创建一些不错且易于使用的东西.

这个过程很简单:在每个要分析的函数顶部创建一个名为PROFILE_FUNC()的宏,它将添加到内部管理的统计信息中.然后有另一个名为PROFILE_DUMP()的宏,它将输出转储到文本文档.

PROFILE_FUNC()创建一个对象,该对象将使用RAII记录对象被销毁之前的时间量.这个RAII对象的构造函数和析构函数都将调用QueryPerformanceCounter.您也可以将这些行留在代码中并通过a控制行为#define PROFILING_ON

  • @j_random_hacker:我想我已经习惯了产品升级给了我新的东西,而不是把我曾经有过的东西带走了.Visual Studio 6 Professional给了我一个分析器 - 我今天必须购买Visual Studio Premium才能获得该功能.1998年为699美元,而今天为4300美元.权利我的屁股.那是凿子. (5认同)
  • @Chris:对不起,我的阅读理解能力差 - 我以为你在抱怨免费的Express Edition没有给你一个探查器,你需要支付600美元来获得它.像你一样,我也期望在一个名为"专业"的版本中使用一个分析器. (5认同)