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()
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()
相关文章推荐
- 关于windows系统的一些知识
- GeoGraphics文档中关于坐标系统的一些知识
- Windows系统下关于进程的一些命令
- 关于Android系统字体的一些知识
- 让多核CPU占用率曲线听你指挥(Windows实现)——《编程之美》1.1学习笔记
- 一些Windows系统的知识(未完待续)
- 让多核CPU占用率曲线听你指挥(Windows实现)——《编程之美》1.1学习笔记
- 关于Windows中的系统消息循环占用CPU的疑问
- 关于windows中一些系统dll的卸载套路
- 一些关于Python的基础知识 - 千月的python linux 系统管理指南学习笔记(3)
- 关于Windows系统中一些实用的修改常识
- 关于系统版本判断的一些知识
- 关于windows系统字体的一些问题
- 关于windows系统安装jdk时出现的一些问题的解决方法
- 关于系统版本判断的一些知识
- 关于继承的一些知识
- 关于网站系统简称知识补充
- 关于Windows系统下的文档显示与搜索
- Windows系统CPU内存网络性能统计第一篇 内存