[英]C++ code performance
关于使用VS2005将代码编写到C ++中的问题,您如何衡量代码的性能?
VS中是否有任何默认工具? 我可以知道哪个函数或类会使我的应用程序慢下来吗?
是否可以将其他外部工具集成到VS中,以衡量我的代码中的差距?
如果您拥有Visual Studio 2005的团队系统版本,则可以使用内置的探查器。
AMD CodeAnalyst可在Windows和Linux上免费使用,并且可在大多数x86或x64 CPU(包括Intel)上运行。
当然,当您拥有AMD处理器时,它还具有其他可用功能。 它还集成到Visual Studio中。
我已经很幸运了。
请注意,通常至少有两种常见的探查器形式:
记录的信息类型可以包括(但不限于):经过时间,CPU周期数,高速缓存命中/未命中等。
检测可以特定于代码的某些区域(只是某些文件或只是您编译的代码,而不是链接到的库)。 开销要高得多(您将代码添加到项目中,这需要时间才能执行,因此您正在更改时序;您可能会更改程序行为,例如中断处理程序或其他与时序相关的代码)。 不过,您可以确保获得有关所检测功能/区域的信息。
采样可能会错过很小的功能或非常零星的功能,但是现代机器具有硬件帮助,可让您更彻底地采样。 请注意,某些采样系统可能仍会注入时序差异,尽管它们通常会小得多。
根据您的使用方式,某些配置工具支持上述两种方式的混合。
您也可以使用Intel VTune。
您需要一个称为探查器的工具。 对于涵盖大多数简单案例的免费案例,我建议您使用Very Sleepy 。 它通过定期采样应用程序的当前调用堆栈来工作。
您可以随时测量自己编写代码的时间和性能。 有关以下函数QueryPerformanceCounter()和QueryPerformanceFrequency(),请咨询MSDN。
要对内存分配和执行时间进行更深入的分析,我们使用Software Verify中的 Memory Validator和Performance Validator。 他们支持除C ++以外的其他几种语言。
我认为衡量性能和查找代码以进行优化是不同的问题,并且需要不同的方法。
为了找到要优化的代码,我发誓要使用这种简单的方法 ,该方法与公认的概要分析方法正交,并且不需要您购买或安装任何工具。
为了衡量性能,我很满意循环运行主题代码并对其进行计时的简单过程。
编辑:顺便说一句,我只是看着非常困倦 ,它似乎在正确的轨道上。 它对整个调用堆栈进行采样,并保留每个堆栈。 我无法确定的是,对于每个调用指令还是常规指令,它是否为您提供了包含该指令的堆栈样本的一部分。 我认为,这是最有价值的统计数据,不需要非常精确。
另一方面,dotTrace看起来也可能保留了堆栈样本,但是其UI表示的调用栈信息似乎是一个调用树。 我想要的是显示单个指令(或语句)的堆栈驻留百分比的内容,因为它们可能位于调用树的不同分支中,因此调用树可能会失去它们的重要性。
我们使用RationalQuantify,它是Rational PurifyPlus工具集的一部分。
它是分析应用程序性能的出色工具。
我最近尝试了JetBrains dotTrace分析器 ,它看起来非常不错。 它帮助我很容易地在现有C ++代码中找到了一些“黑洞”。
在将C#和C ++混合使用的解决方案中,它在Visual Studio 2005 Professional中可以正常工作-它为这两段代码使用正确的函数名,并进行了集成分析。 您可以追踪时间或记忆。
可惜的是,评估期到期了:)
我们从AQTime获得了不错的成绩。 它不是免费的,但是比Visual Studio便宜;-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.