我正在尝试了解分析并遵循此guide因此我尝试在Windows 7上对MS VS 2010上的以下代码进行分析。我不确定这是否是正确的问题
#include <iostream>
using namespace std;
int add(int,int);
int main()
{
int x [100];
for (int i=0;i<100;i++)
{
x[i]=i;
}
cout<<add(2,3);
system("PAUSE");
}
int add (int x, int y)
{
return x+y;
}
我得到了以下结果
根据指南High exclusive counts may indicate a performance bottleneck within the function itself.
似乎[apphelp.dll]
和[ntdll.dll]
基于高独占计数存在性能瓶颈。
这些是我的以下问题,我在理解文章时遇到了问题
1)70%的包容性样本是什么意思?这是否意味着70%的时间花在了这个功能上。这有什么意义?
2)独占样本的平均值为30%或0%是什么意思?这有什么意义?
3)对于图表,X轴是挂钟时间,Y轴怎么样?它有什么意义
4)我创建了一个函数:add(int x , int y )
,它在配置文件报告中的位置??
5)[apphelp.dll]
和[ntdll.dll]
究竟是什么?我知道它们是动态链接库,但为什么它被置于功能之下。我在代码中看不到这样的函数
6)为什么Graph
,Hot Path
,Function doing the most individual work
每次生成具有相同代码集的新报告时都会发生变化
7)我应该如何找到应用程序中的性能瓶颈并对其进行优化?
8)为什么像_mainCRTStartup
,[kernel32.dll]
这样的函数有0%的独占样本,它是什么意思?
请原谅我提出这样的新手问题,我是代码性能分析的新手
答案 0 :(得分:1)
我的理解:
1)包含表示在此函数中花费的时间,包括您在此函数中调用的函数所花费的时间。例如:包含(主要)包含添加时间,独占(主要)没有。
2)检查http://en.wikipedia.org/wiki/Microsoft_Windows_library_files#NTDLL.DLL 你的代码基本上什么都不做。大部分时间花在系统暂停上...你的代码执行1几纳秒,然后你需要一些时间按返回
3)这是cpu百分比的使用。超过100个时钟周期操作系统分配给你的程序有多少?
4)不确定,它可能已被内联...如果您使用/ Fa开关来获取程序集,在启用优化(O2)的情况下,您可能会看到编译器已翻译为“cout&lt;&lt; ;通过汇编添加(2,3)“cout&lt;&lt;&lt; 5”
5)你正在使用系统(“暂停”)和cout。那些会调用windows dll(你的os api)
6)图表:你的cpu正在做别的吗?你使用其他应用程序进行分析? 对于另外两个:取消系统(“暂停”)并检查它是否仍然发生变化
7)你的方法是正确的,但是这段代码没有做任何事情,所以你的应用在系统dll上花费的时间多于在代码中的时间:)
8)与上述相同。
尝试一个真正做某事的测试函数,比如一个带有指针和你自己的交换函数给出的比较的排序函数。你在swap()比较(..)和排序(..)函数上花了多少时间?
尝试这样的代码: http://www.ousob.com/ng/turboc/ng4686d.php
并比较一些shity对象,也许使用一个讨厌的交换函数与深拷贝。而且我知道你实际上会看到一些东西。