C# 高精度计时器Stopwatch

embedded/2024/11/14 18:03:46/

C# 高精度计时器Stopwatch

  • 引言
  • 经典举例
    • (1)启动和停止方法实例
    • (2)复位和重启方法实例
  • 小结

引言

偶然发现C# 的计时器类Stopwatch,他特别适合测量运行时间,使用简单、计时精确。它源于命名空间System.Diagnostics,使用时必须using引用。

经典举例

下面用一秒延时的实例来创建一个最简单的实例。

(1)启动和停止方法实例

        //按键单击private void button_watch_Click(object sender, EventArgs e){            Console.WriteLine("action_spent_time:" + watch(action));}//模拟用户函数耗时private void action(){Thread.Sleep(1000);}//开始和停止定时器public static double watch(Action action){//实例化Stopwatch stopWatch = new Stopwatch();//启动定时器stopWatch.Start();//用户任务action();//停止定时器stopWatch.Stop();//返回计时器时间return stopWatch.Elapsed.TotalMilliseconds;}

打印显示

action_spent_time:1014.7956

(2)复位和重启方法实例

    //按键单击private void button_watch_Click(object sender, EventArgs e){watchResetAndRestart(action);}//模拟用户函数耗时private void action(){Thread.Sleep(1000);}//复位和重启计时器时器public void watchResetAndRestart(Action action){//实例化Stopwatch stopWatch = new Stopwatch();//启动定时器stopWatch.Start();//用户任务action();Console.WriteLine("action:"+ stopWatch.Elapsed.TotalMilliseconds);//复位定时器stopWatch.Reset();Console.WriteLine("action reset:" + stopWatch.Elapsed.TotalMilliseconds);//重启定时器stopWatch.Restart();//用户任务action();Console.WriteLine("action Restart:" + stopWatch.Elapsed.TotalMilliseconds);//复位定时器stopWatch.Reset();}
}

打印显示:

action:1000.8485
action reset:0
action Restart:1009.2571

小结

是不是觉得很简单。小伙伴们可以用起来。
1、实例中可以看到精度可以得到0.1微秒使用double类型,我认为算精度很高的吧,不需要这么高精度可以做运算舍去,或者使用其它的更低精度的属性,如stopWatch.ElapsedMilliseconds等。
2、复位reset()和停止Stop()的功能都停止了计时器,但是reset,将时间复位为0了,这里注意一下就好。


http://www.ppmy.cn/embedded/136635.html

相关文章

Python实现PSO粒子群优化算法优化CNN-Transformer回归模型(优化神经元数量和迭代次数)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着深度学习技术的发展,卷积神经网络(CNN)和变换器&#xff0…

python manage.py命令集

python manage.py 是 Django 框架中用于管理 Django 项目的命令行工具。它提供了一系列命令,用于创建应用、运行服务器、创建数据库迁移、管理静态文件等。 startproject python manage.py startproject myproject 创建一个新的 Django 项目。myproject 是项目的…

【多模态读论文系列】LLaMA-Adapter V2论文笔记

分享第二篇论文阅读笔记,欢迎指正,LLaMA-Adapter V2: Parameter-Efficient Visual Instruction Model LLaMA-Adapter V2: Parameter-Efficient Visual Instruction Model 论文:https://arxiv.org/abs/2304.15010 代码:https://…

MISRA C++ 2023 编码标准规范

百度安全验证 百度安全验证C新编码标准MISRA C:2023已发布,一起来了解下C的发展史

实现 Nuxt3 预览PDF文件

安装必要的库,这里使用PDF.js库 npm install pdfjs-dist --save 为了解决跨域问题,在server/api 下 创建一个请求api, downloadFileByProxy.ts import { defineEventHandler } from h3;export default defineEventHandler(async event >…

React Hooks 为什么不能在 if 语句中使用???

主要原因是因为与 Hooks 的调用顺序有关。 React 有一条“Hooks 调用顺序不变”的规则,为的是来保证组件的状态。 每当组件渲染的时候,Hooks 必须按照顺序调用。 如果将 Hook 放在 if 语句中,可能会导致调用顺序发生变化,从而打…

Go 使用 Redis 实现分布式锁

Go 使用 Redis 实现分布式锁 Redis 提供了一些原语,可以帮助我们实现高效的分布式锁。下边是使用 Redis 实现分布式锁的一种常见方法 实现分布式锁的方法 1. 使用 Redis 的 SET 命令 Redis 的 SET 命令支持设置键值对,并且可以通过 NX 和 EX 参数来实…

Linux:基于ncdu命令的存储容量自动扫描统计工具

一、背景 设备存储容量不够时,需要删除清理无用文件,若文件目录较多,逐个去统计每个文件目录的存储占用量,比较麻烦。ncdu命令有一个比较好的扫描和删除交互界面,基于ncdu命令写一个定时自动统计脚本,可以…