我正在寻找一个分析器,以找到我的c++代码中的瓶颈。我想找一个免费的、非侵入性的、好的分析工具。我是一名游戏开发者,我在Xbox 360上使用PIX,我发现它非常好,但它不是免费的。我知道英特尔VTune,但它也不是免费的。
当前回答
有一个用于MS VC 7.1和更高版本的仪器(功能精确)分析器,称为MicroProfiler。您可以在这里(x64)或这里(x86)获取它。它不需要对代码进行任何修改或添加,并且能够实时显示调用方和被调用方的函数统计信息,而不需要关闭应用程序/停止分析过程。
它集成了VisualStudio,所以你可以很容易地为项目启用/禁用概要。也可以将它安装在干净的机器上,它只需要将符号信息与可执行文件一起定位。
当来自采样分析器(如Very Sleepy)的统计近似值不够用时,这个工具是有用的。
粗略比较表明,它优于AQTime(当它在检测中调用时,函数级运行)。下面的程序(完全优化,内联禁用)运行速度快三倍的微分析器实时显示结果,比AQTime简单地收集统计数据:
void f()
{
srand(time(0));
vector<double> v(300000);
generate_n(v.begin(), v.size(), &random);
sort(v.begin(), v.end());
sort(v.rbegin(), v.rend());
sort(v.begin(), v.end());
sort(v.rbegin(), v.rend());
}
其他回答
有一个用于MS VC 7.1和更高版本的仪器(功能精确)分析器,称为MicroProfiler。您可以在这里(x64)或这里(x86)获取它。它不需要对代码进行任何修改或添加,并且能够实时显示调用方和被调用方的函数统计信息,而不需要关闭应用程序/停止分析过程。
它集成了VisualStudio,所以你可以很容易地为项目启用/禁用概要。也可以将它安装在干净的机器上,它只需要将符号信息与可执行文件一起定位。
当来自采样分析器(如Very Sleepy)的统计近似值不够用时,这个工具是有用的。
粗略比较表明,它优于AQTime(当它在检测中调用时,函数级运行)。下面的程序(完全优化,内联禁用)运行速度快三倍的微分析器实时显示结果,比AQTime简单地收集统计数据:
void f()
{
srand(time(0));
vector<double> v(300000);
generate_n(v.begin(), v.size(), &random);
sort(v.begin(), v.end());
sort(v.rbegin(), v.rend());
sort(v.begin(), v.end());
sort(v.rbegin(), v.rend());
}
我使用Luke Stackwalker,它在我的Visual Studio项目中发挥了作用。
其他有趣的项目有:
精通 戴宁斯特
另一个分析器是Shiny。
我强烈推荐Windows性能工具包中的Windows性能分析器(WPA)。WPR (Windows Performance Recorder)命令行工具可以记录ETW (Event Tracing for Windows)日志,以便后续使用Windows性能分析工具进行分析。有一些很好的教程教你如何使用这个工具。
wpr.exe -start CPU
...
wpr.exe -stop output.etl
wpa.exe output.etl
微软有Windows性能工具包。
它需要Windows Vista、Windows Server 2008或Windows 7。
推荐文章
- decltype(auto)的一些用途是什么?
- Shared_ptr转换为数组:应该使用它吗?
- Printf与std::字符串?
- 禁用复制构造函数
- 我如何找到哪个程序正在使用端口80在Windows?
- 在Windows中有像GREP这样的模式匹配实用程序吗?
- 只接受特定类型的c++模板
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 如何在Windows命令提示符下运行.sh ?
- c++ 11中的递归lambda函数
- 在c++中指针使用NULL或0(零)吗?
- 在c++中,如何将int值附加到字符串中?
- 如何从命令行在windows中找到mysql数据目录
- 就性能而言,使用std::memcpy()还是std::copy()更好?
- 为什么布尔值是1字节而不是1位?