到目前为止,我只使用过Rational Quantify。 我听说过有关英特尔VTune的好消息,但从未尝试过!

编辑:我主要是在寻找可以检测代码的软件,因为我猜这是获得非常好结果的唯一方法。


也可以看看:

Windows上的本机C ++有哪些优秀的分析器?

===============>>#1 票数:34

对于Linux开发(尽管其中一些工具可能适用于其他平台)。 这是我所知道的两个大牌,还有很多其他较小的名字在一段时间内没有看到积极的发展。

===============>>#2 票数:26

对于Linux: Google Perftools

  • 比valgrind更快(但不是那么精细)
  • 不需要代码检测
  • 漂亮的图形输出( - > kcachegrind)
  • 进行内存分析,cpu-profiling,泄漏检查

===============>>#3 票数:8

恕我直言, 使用调试器进行采样是最好的方法。 您只需要一个IDE或调试器,它可以让您暂停程序。 在您安装Profiler之前,它会解决您的性能问题。

===============>>#4 票数:7

我唯一的经验是使用AutomatedQA(现为SmartBear软件)的AQTime 它内置了几种类型的分析器(性能,内存,Windows句柄,异常跟踪,静态分析等),并且可以使用代码来获取结果。

我很喜欢使用它 - 找到那些代码中的小变化可以显着提高性能的地方总是很有趣。

===============>>#5 票数:5

Visual Studio 2008中的分析器非常好:快速,用户友好,清晰且集成在IDE中。

===============>>#6 票数:5

我过去曾经广泛使用过Glowcode ,除了积极的体验之外别无他法。 它的Visual Studio集成非常好,它是我曾经使用过的最有效/直观的分析器(甚至与托管代码的分析器相比)。

显然,如果你没有在Windows上运行,那就没用了,但是这个问题让我不清楚你的要求是什么。

===============>>#7 票数:5

我以前从未做过剖析。 昨天我编写了一个ProfilingTimer类,它带有一个静态时间表(map <std :: string,long long>)用于时间存储。

构造函数存储起始刻度,析构函数计算经过的时间并将其添加到地图中:

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");

这条线在我想要描述的所有函数中添加有点麻烦,因为我必须猜测哪些函数需要花费很多时间。 但它运作良好,打印功能以%表示消耗时间。

(是否有其他人使用任何类似的“自制分析”?或者它只是愚蠢?但它很有趣!有人有改进建议吗?

是否有某种自动添加线到所有功能?)

===============>>#8 票数:4

对于Windows,请查看Xperf 它使用采样配置文件,具有一些有用的UI,并且不需要检测。 对于跟踪性能问题非常有用。 你可以回答以下问题:

  • 谁使用最多的CPU? 使用调用堆栈深入查看函数名称。
  • 谁分配的内存最多?
  • 谁在进行大多数注册表查询?
  • 磁盘写? 等等

当您发现瓶颈时,您会感到非常惊讶,因为它们可能不在您预期的位置!

===============>>#9 票数:4

毫无疑问,oprofile; 它简单,可靠,完成工作,并且可以提供各种各样的数据细分。

===============>>#10 票数:3

既然你没有提到你正在研究的平台,我会说Linux下的cachegrind。 当然。 它是Valgrind工具集的一部分。

http://valgrind.org/info/tools.html

我从未使用过它的子功能Callgrind,因为我的大多数代码优化都是针对内部函数的。

请注意,有一个前端KCachegrind可用。

===============>>#11 票数:3

对于Windows开发,我一直在使用软件验证的性能验证器 - 它快速,合理准确,价格合理。 最好的是,它可以检测正在运行的进程,并允许您在运行时打开和关闭数据收集,无论是手动还是基于callstack - 非常适合分析较大程序的一小部分。

===============>>#12 票数:3

对于Windows,我尝试过AMD Codeanalyst,Intel VTune和Visual Studio Team Edition中的分析器。

Codeanalyst是错误的(经常崩溃),在我的代码中,它的结果通常是不准确的。 它的用户界面不直观。 例如,要在配置文件结果中到达调用堆栈显示,您必须单击“进程”选项卡,然后单击程序的EXE文件名,然后单击其上带有小字母“CSS”的工具栏按钮。 但它是免费软件,因此您可以尝试它,并且它可以工作(具有较少的功能)而无需AMD处理器。

VTune(700美元)有一个糟糕的用户界面 IMO; 在一个大型程序中,很难找到你想要的特定调用树,你只能一次查看一个程序中的一个“节点”(一个具有直接调用者和被调用者的函数) - 你不能看一个完整的呼叫树。 有一个调用图表视图,但我找不到一种方法来使相对执行时间出现在图表上。 换句话说,无论花费多少时间,图中的函数看起来都是一样的 - 就好像它们完全错过了剖析点。

Visual Studio的分析器具有三者中最好的GUI,但由于某种原因,它无法从我的大多数代码中收集样本(仅在我的整个C ++程序中为一些函数收集样本)。 此外,我找不到直接购买它的价格或方式; 但它附带我公司的MSDN订阅。 Visual Studio支持托管代码,本机代码和混合代码; 在这方面,我不确定其他两个剖析器。

总之,我还不知道一个好的剖析器! 我一定会在这里查看其他建议。

===============>>#13 票数:3

我在电脑平台上使用devpartner

===============>>#14 票数:3

分析有不同的要求。 检测代码是否正常,或者您是否需要分析优化代码(甚至已编译的代码)? 您是否需要逐行的个人资料信息? 你在运行哪个操作系统? 您是否还需要配置共享库? 跟踪系统调用怎么样?

就个人而言,我使用oprofile来做我所做的一切,但这可能不是每种情况下的最佳选择。 Vtune和Shark也很出色。

===============>>#15 票数:2

唯一敏感的答案是来自英特尔的PTU 当然最好在英特尔处理器上使用它,并至少在C2D机器上获得更有价值的结果,因为架构本身更容易回馈有意义的配置文件。

===============>>#16 票数:2

我已经在Windows和Linux下使用VTune多年,效果非常好。 后来的版本变得更糟,当他们将该产品外包给他们的俄罗斯开发人员时,质量和性能都下降了(增加的VTune崩溃,通常15分钟以上打开分析文件)。

关于仪器,你可能会发现它没有你想象的那么有用。 在那种我已经致力于添加仪器的应用程序中,通常会减慢产品速度以至于它不再起作用(真实故事:启动应用程序,回家,第二天回来,应用程序仍在初始化)。 此外,通过非仪表性分析,您可以对实时问题做出反应。 例如,使用VTune远程日期收集器,我可以针对具有数百个同时连接的实时服务器启动采样会话,这些连接遇到性能问题并捕获生产中发生的问题,这些问题在测试环境中永远无法复制。

===============>>#17 票数:2

ElectricFence非常适合malloc调试

===============>>#18 票数:2

我尝试过量化AQTime,而Quantify因其无价的“专注于子树”和“删除子树”功能而获胜。

===============>>#19 票数:1

我最喜欢的工具是Easy Profiler: http//code.google.com/p/easyprofiler/

它是一个编译时间分析器:必须使用一组例程手动检测源代码,以便描述目标区域。 但是,一旦运行应用程序并将度量自动写入XML文件,只需打开Observer应用程序并对分析/比较工具进行少量点击,然后才能在定性图表中查看结果。

===============>>#20 票数:1

Windows下的Visual Studio 2010探查器。 VTune有一个很好的调用图工具,但它从Windows Vista / 7开始就被破坏了。 我不知道他们是否修好了。

===============>>#21 票数:0

让我为EQATEC提供一个插件...正是我在寻找...简单易学和使用,并为我提供了快速找到热点所需的信息。 我更喜欢它内置到Visual Studio中的内容(虽然我尚未尝试过VS 2010,但公平)。

拍摄快照的能力很大。 我经常在等待真正的目标分析运行时进行额外的分析和优化...喜欢它。

哦,它的基础版本是免费的!
http://www.eqatec.com/Profiler/

  ask by OysterD translate from so

未解决问题?本站智能推荐:

8回复

Windows上的本机C ++有哪些优秀的分析器? [关闭]

我正在寻找一个用于本机C ++的分析器。 它当然不一定是免费的,但成本会影响购买决策。 这是为了商业工作,所以我不能使用个人或学术许可副本。 我正在寻找的主要功能是: 流程级别指标 组件级指标 行级指标 支持多线程代码 可用性 成本
2回复

是否有任何好的工具/框架来概述C / C ++应用程序的性能[关闭]

我是C / C ++的新手,因此遇到性能问题,我的程序运行速度非常慢。 我想发现热点是减少我的代码的总体执行时间。 在Windows中分析C / C ++应用程序的最流行和最简单的方法是什么? 我对使用Mini Proler剖析 .NET应用程序如此容易感到惊讶。 我们在C / C ++
1回复

在C ++中对函数进行性能分析

我对在用C ++编写并在linux上运行的程序中找到特定功能的内存访问次数感兴趣。 为了找到内存访问次数,我使用了Valgrind的cachegrind。 我使用以下命令来获取内存访问: 我的那个函数的内存访问次数如下所示: 现在基本上,我具有三个功能,并且我想根据内存访问次
2回复

用C ++免费分析? [重复]

可能重复: 您最喜欢的分析工具是什么(对于C ++) 在Java中,它们有一个不错的免费分析器,该分析器与称为jvisualvm的sdk一起提供。 C ++是否有类似的东西? 我在Windows上并且安装了Visual Studio2010。我是一名学生/业余爱好者,所以免费
7回复

分析C ++多线程应用程序

您是否使用过英特尔Vtune分析仪等任何分析工具? 您对Linux和Windows上的C ++多线程应用程序有什么建议? 我主要对缓存未命中,内存使用,内存泄漏和CPU使用率感兴趣。 我使用valgrind(仅在UNIX上),但主要用于查找内存错误和泄漏。
2回复

处理C ++中执行时间的大量分析

我目前正在研究涉及大量数据和复杂算法的科学计算项目,因此我需要进行大量的代码分析。 我目前依靠<ctime>和clock_t来计算代码的执行时间。 我对这个解决方案非常满意......除了我基本上计时一切,因此对于每一行实际代码我都要调用start_time_function12
8回复

在没有分析器的情况下在C ++中测试代码速度的最佳方法,还是尝试没有意义?

在SO上,有很多关于性能分析的问题,但我似乎没有找到整体情况。 涉及到相当多的问题,大多数问答都会忽略所有问题,但不能忽视其中的一些问题。 我想知道什么。 如果我有两个功能做同样的事情,我很好奇速度的差异,没有外部工具,定时器测试这个是否有意义,或者在测试中编译会影响结果吗? 我
1回复

分析表达模板

我正在尝试对表达式模板进行配置,该模板与David Vandevoorde的书“ C ++ Template”中的模板类似。 以下是我的理论分析,这可能是错误的,因为测试显示出意外的结果。 假设测试是关于: 其中,A,B,C,R是在堆上分配的数组。 数组的大小为2。因此将执行以下操
4回复

测试C ++代码的性能

我可以使用哪些免费工具来测试Linux中C ++代码的性能? 基本上我想确定代码的瓶颈并提高性能。 我的应用程序主要涉及使用来自网络的数据的计算代码。 所以我想提高代码的执行速度。 谢谢。
2回复

原始类型比C ++中的用户类型慢?

我很好奇并做了一些基准来确定原始类型(如int或float和用户类型)之间的性能差异。 我创建了一个模板类Var ,创建了一些内联算术运算符。 测试包括为原始和Var向量循环此循环: 我对结果感到非常惊讶,事实证明我的Var类在大多数情况下都是更快的,平均而言,这个循环在类中减少