到目前为止,我只使用过Rational Quantify.我听说过有关英特尔VTune的好消息,但从未尝试过!
编辑:我主要是在寻找可以检测代码的软件,因为我猜这是获得非常好结果的唯一方法.
Windows上的本机C++有哪些优秀的分析器?
对于Linux开发(尽管其中一些工具可能适用于其他平台).这是我所知道的两个大牌,还有很多其他较小的名字在一段时间内没有看到积极的发展.
Valgrind的
TAU - 调整和分析实用程序
对于Linux: Google Perftools
比valgrind更快(但不是那么精细)
不需要代码检测
漂亮的图形输出( - > kcachegrind)
进行内存分析,cpu-profiling,泄漏检查
恕我直言,使用调试器进行采样是最好的方法.您只需要一个IDE或调试器,它可以让您暂停程序.在您安装Profiler之前,它会解决您的性能问题.
我唯一的经验是使用AutomatedQA(现在的SmartBear软件)进行AQTime分析.它内置了几种类型的分析器(性能,内存,Windows句柄,异常跟踪,静态分析等),并使用代码来获取结果.
我很喜欢使用它 - 找到那些代码中的小变化可以显着提高性能的地方总是很有趣.
我过去曾经广泛使用过Glowcode,除了积极的体验之外别无他法.它的Visual Studio集成非常好,它是我曾经使用过的最有效/直观的分析器(甚至与托管代码的分析器相比).
显然,如果你没有在Windows上运行,那就没用了,但是这个问题让我不清楚你的要求是什么.
Visual Studio 2008中的分析器非常好:快速,用户友好,清晰且集成在IDE中.
我以前从未做过剖析.昨天我编写了一个ProfilingTimer类,它带有一个静态时间表(map
构造函数存储起始刻度,析构函数计算经过的时间并将其添加到地图中:
ProfilingTimer::ProfilingTimer(std::string name) : mLocalName(name) { sNestedName += mLocalName; sNestedName += " > "; if(sTimetable.find(sNestedName) == sTimetable.end()) sTimetable[sNestedName] = 0; mStartTick = Platform::GetTimerTicks(); } ProfilingTimer::~ProfilingTimer() { long long totalTicks = Platform::GetTimerTicks() - mStartTick; sTimetable[sNestedName] += totalTicks; sNestedName.erase(sNestedName.length() - mLocalName.length() - 3); }
在我要配置的每个函数(或{block})中,我需要添加:
ProfilingTimer _ProfilingTimer("identifier");
这条线在我想要描述的所有函数中添加有点麻烦,因为我必须猜测哪些函数需要花费很多时间.但它运作良好,打印功能以%表示消耗时间.
(是否有其他人使用任何类似的"自制分析"?或者它只是愚蠢?但它很有趣!有没有人有改进建议?
是否有某种自动添加线到所有功能?)