您的位置:首页 > 编程语言

Windows中一些关于CPU\系统效能的知识——编程之美1.1

2014-03-16 20:49 267 查看
Perfmon是从Windows NT开始就包含在Windows管理工具组中的专业检测工具之一,可获取有关操作系统、应用程序和硬件的各种效能计数器(perf counter)。perfmon的用法相当直接,只要选择检测的对象(如处理器、RAM或硬盘),然后选择效能计数器(比如监视物理磁盘的平均队列长度);
Micorsoft .NETFramework提供了PerformanceCounter这一对象,可以方便地得到当前各种性能数据,包括CPU的使用率;
几个API函数
1、void Sleep(DWORD dwMilliseconds);使调用线程暂停自己的运行,直到指定的时间间隔过去为止;
2、DWORD WaitForSingleObject(HANDLEhHandle,DWORD dwMilliseconds);
hHandle:所请求对象的句柄。如果该对象处于无信号状态,即未通知的状态,则该函数就会一直等待,这样就暂停线程的执行;
dwMilliseconds:指定等待的时间间隔,以毫秒为单位。如果指定的时间间隔已过,即使所请求的对象仍处于无信号状态,WaitForSingleObject函数也会返回;
3、DWORDGetTickCount(void);操作系统启动到当前所经过的毫秒数,常常用来判断某个方法执行的时间,并非实时发送,而是由系统每18ms发送一 次,因此其最小精度为18ms;
4、BOOLQueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)/BOOLQueryPerformanceCounter (LARGE_INTEGER *lpCount):要求计算机从硬件上支持高精度定时器,定时前应该先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率。接着在需要严格计时的事件发生前和发生之后分别调用QueryPerformanceCounter(),利用两次获得的计数之差和时钟频率,就可以计算出事件经历的精确时间;
5、timeGetSystemTime():函数返回系统时间,(毫秒)。这里的系统时间是指自从系统启动时到调用该函数时的时间间隔;
6、PerformanceCounter——Microsoft .NET Framework 提供的对象,可以方便得得到当前各种性能数据,包括CPU的使用率;
7、GetProcessorInfo()/SetThreadAffinityMask():GetProcessorInfo()获得多处理器的信息,SetThreadAffinityMask()指定进程在哪一个处理器上运行;
8、GetCPUTickCount():不过现代计算机CPU的频率会随着负载而变化,所以没大有必要使用该函数,使用getTickCount就足够了
X86平台定义函数(RDTDC指令后去当前CPU核心运行周期数):
inline _int64 GetCPUTickCount()
{
_asm
{
rdtsc;
}
}
在X64平台上定义:
#define GetCPUTickCount() _rdtsc()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: