using System;

using System.ComponentModel;

using System.Runtime.InteropServices;

using System.Threading;

namespace Masuit.Tools.Systems

{

// 纳秒级计时器

///

public class HiPerfTimer

{

[DllImport("Kernel32.dll")]

private static extern bool QueryPerformanceCounter(out long lpPerformanceCount);

[DllImport("Kernel32.dll")]

private static extern bool QueryPerformanceFrequency(out long lpFrequency);

private long _startTime;

private long _stopTime;

private readonly long _freq;

///

/// 纳秒计数器

///

public HiPerfTimer()

{

_startTime = 0;

_stopTime = 0;

if (QueryPerformanceFrequency(out _freq) == false)

{

// 不支持高性能计数器

throw new Win32Exception();

}

}

///

/// 开始计时器

///

public void Start()

{

// 来让等待线程工作

Thread.Sleep(0);

QueryPerformanceCounter(out _startTime);

}

///

/// 启动一个新的计时器

///

///

public static HiPerfTimer StartNew()

{

HiPerfTimer timer = new HiPerfTimer();

timer.Start();

return timer;

}

///

/// 停止计时器

///

public void Stop()

{

QueryPerformanceCounter(out _stopTime);

}

///

/// 时器经过时间(单位:秒)

///

public double Duration => (_stopTime - _startTime) / (double)_freq;

///

/// 执行一个方法并测试执行时间

///

///

///

public static double Execute(Action action)

{

var timer = new HiPerfTimer();

timer.Start();

action();

timer.Stop();

return timer.Duration;

}

}

}

//调用

private void button2_Click(object sender, EventArgs e)

{

HiPerfTimer timer = HiPerfTimer.StartNew();//执行一个待办事项并测试执行时间

//待办事项

timer.Stop();

label1.Text="执行耗时" + timer.Duration + "s";// 返回测试时间

double time = HiPerfTimer.Execute(() =>//执行一个方法并测试执行时间

{

//方法

});

label1.Text="执行耗时" + time + "s";//返回测试时间

}

c纳秒级计时器_纳秒级性能计时器相关推荐

  1. crazy的比较级最高级_形容词比较级和最高级more, most

    最高级是英语语法常用的简单的但是又能显示出英语实力的知识,作文里多用这个能提分..小编在这里整理了相关知识,快来学习学习吧! 形容词比较级和最高级more, most 形容词比较级和最高级的规则变化 ...

  2. 一个黑色全屏的计时器_佳作分享最佳倒数计时器设计分析【附原型实例】

    视觉效果和动画效果已经成为产品设计中不可或缺的一部分,开发人员使用动画效果可以创建引人入胜的内容,营销人员可以使用这些效果来获得更好的产品覆盖率和良好的转化率.倒数计时器就是这样一种元素,当用户登陆页 ...

  3. 千万级游标_在一个千万级的数据库查寻中,如何提高查询效率

    在一个千万级的数据库查寻中,如何提高查询效率? 1)数据库设计方面: a.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. b.应尽量避免在 w ...

  4. java程序设计 秒表计时器_【Java】Java计时器(秒表)

    import javax.swing.*;importjava.awt.HeadlessException;importjava.awt.BorderLayout;importjava.awt.Flo ...

  5. java纳秒级时间戳_golang的time包:秒、毫秒、纳秒时间戳输出方式

    菜鸟的时候只知道时间戳有10位.13位.还有好长位数的. 入坑久了才明白 10位数的时间戳是以 秒 为单位: 13位数的时间戳是以 毫秒 为单位: 19位数的时间戳是以 纳秒 为单位: golang中 ...

  6. java 纳秒 毫秒_golang的time包:秒、毫秒、纳秒时间戳输出方式

    菜鸟的时候只知道时间戳有10位.13位.还有好长位数的. 入坑久了才明白 10位数的时间戳是以 秒 为单位: 13位数的时间戳是以 毫秒 为单位: 19位数的时间戳是以 纳秒 为单位: golang中 ...

  7. 安卓原生系统_小米新机曝光,运行原生安卓系统;准!四川宜宾5.3级地震提前14秒预警...

    小米新机曝光, 运行原生安卓系统 小米A1.A2和A2 Lite是目前小米仅有的3款Android One手机,搭载原生Android系统.第一代于2017年8月发布,后两款于去年7月份推出.现在看来 ...

  8. android扫雷计时器,扫雷纪录:高级31秒,中级7秒,初级0.49秒,怎么做到的?

    原标题:扫雷纪录:高级31秒,中级7秒,初级0.49秒,怎么做到的? 大家在接触电脑的时候肯定都接触过一款叫做扫雷的游戏,这个小游戏是1981年微软设计师罗伯特·杜尔和卡特·约翰逊两位工程师设计的.很 ...

  9. 转:架构师实践日|亿级短视频应用秒拍的架构实践

    转自: http://mp.weixin.qq.com/s?__biz=MjM5NzAwNDI4Mg==&mid=2652190131&idx=2&sn=6672422564e ...

最新文章

  1. 这10道Java面试题!95%的人回答不出来!
  2. Linux 系统调用(一)
  3. DNS报文格式(RFC1035)
  4. XCode6报数组越界错误的问题
  5. TalkingData CTO肖文峰:研发工程师,你为啥升不上去?
  6. 设计模式--责任链(Responsibility_Chain)模式
  7. 【NLP傻瓜式教程】手把手带你fastText文本分类(附代码)
  8. 工控服务器性能指标,PLC的7大性能指标
  9. 使用XFire+Spring构建Web Service(一)——helloWorld篇
  10. mybatis源码学习(三):MappedStatement的解析过程
  11. C++11 实现defer功能(转载)
  12. JavaWeb03-HTML篇笔记(二)
  13. html 折叠焦点图切换,自适应全屏焦点图切换CSS3特效
  14. 锐捷交换机基本功能配置
  15. 一个稳定、快速的云服务器——萤光云
  16. oracle授权v$lock,访问V$LOCK视图Oracle 11g出现性能问题
  17. C++ uint8_t
  18. Jenkins中出现No valid crumb was included in the request
  19. Python操作excel基础
  20. 如何优化关键词搜索排名(提升关键词排名的方法)

热门文章

  1. 【译】怎样处理 Safari 移动端对图片资源的限制
  2. 使用Fiddler对android应用抓包 专题
  3. sed,awk,grep,trap,trap,cut,tr,curl,find
  4. .net 引用Com组件的几种方案
  5. hive中分组取前N个值的实现
  6. 11个有关HTML5的事实
  7. 64位weblogic11g安装
  8. FineBI For Excel插件:助力地产业务人员节省50%报表制作时间
  9. 展望2015把C++版本的掼蛋程序写好
  10. 新浪uc2010免费下载