花了很长时间才得到的经验,与大家分享。

1. RDTSC - 粒度: 纳秒级 不推荐
优势: 几乎是能够获得最细粒度的计数器
抛弃理由:

A) 定义模糊
 - 曾经据说是处理器的cycle counter,但是后来似乎又不是了。
有的机器上每秒的TSC增长值等于CPU频率,有的却是一个不对应任何配置的数。到底是什么,Intel也没解释清楚。

B) 不准确
 - 这是最重大的缺陷。再细的粒度,不准的话也没用,至少不能当时间用。
在有的CPU上,特别是支持变频技术的笔记本CPU上,TSC增长值会随着CPU的频率改变。忙的时候跑得快,闲得时候跑得慢。

2. QueryPerformanceCounter - 粒度: 1~100微秒级 不推荐
优势: 尽管比RDTSC粒度稍低,但是不存在RDTSC在变频CPU上的问题。
 知道这个API的人估计都倾向于用这个,因为M$对这个API给出了比较明确的定义,就是每秒钟某个计数器增长的数值。
抛弃理由: 还是不准确

尽管没有源代码,但是从M$的帮助文档和知识库可以了解到,PerformanceCounter是依赖于主板上与PCI设备有关联的硬件。这就意味着,PerformanceCounter的结果还是会受到硬件频率,特别是总线频率的影响。

事实上,我在EeePC上测试的时候就发现,系统采用节能模式的时候PerformanceCounter出来的结果老是偏慢很多,超频模式的时候又偏快,而且用电池和接电源的时候效果还不一样!

3. timeGetTime - 粒度: 毫秒级 推荐
尽管粒度进一步降低,但是其无与伦比的优势就是,准确。
在任何机器上返回的都是当前系统的启动时间,精确到1毫秒。

使用注意事项:

A) 在NT系统上(据说)默认精度为10ms,但是可以用timeBeginPeriod来降低到1ms
 B) 返回的是一个32位整数,所以要注意大约每49.71天会出现归零(不像前两个是64位数,要几百年才会归零)。

http://www.cnblogs.com/AnyDelphi/archive/2009/05/14/1456716.html

最新文章

  1. weblogic10内存溢出解决方法
  2. JSON学习
  3. ADO.net 更新和插入数据 遇到null 执行不成功
  4. [Linux & SVN] SVN介绍及Linux下SVN命令收录
  5. Android基于mAppWidget实现手绘地图(十一)–移动地图到某个坐标
  6. BZOJ3615 : MSS
  7. git删除远程文件夹或文件的方法
  8. JavaScript“尽快失败”的原则
  9. 本人整理的一些PHP常用函数
  10. .Net平台开源作业调度框架Quartz.Net
  11. gdb查看虚函数表、函数地址
  12. grub2手动引导ubuntu
  13. 【Weblogic】在linux创建domain过慢的解决方法
  14. js获取某个日期所在周周一的日期
  15. iOS 加锁的方式
  16. RxJS操作符(一)
  17. Http协议Status状态代码
  18. python之WSGI与Guincorn
  19. du 统计文件夹大小
  20. 跨平台的移动应用开发框架-Sencha Touch

热门文章

  1. springboot 使用传统方式部署
  2. android 如何创建配置文件和读配置文件
  3. RGB值得计算公式
  4. Configuring a remote m-phy
  5. OpenCV For iOS 1: 连接OpenCV 3.0
  6. js之美
  7. openresty: nginx worker不同请求之间共享数据
  8. Android新闻案例clientserver达到,完全自己的新闻节目平台
  9. caffe 的架构设计及其依赖包的解析
  10. python 教程 第十三章、 特殊的方法