当前位置:首页 > C#编程 > C#/.net框架 > 正文内容

计算代码执行时间,可以精确到十亿分之一秒

Jorge2年前 (2022-05-08)C#/.net框架760

注:

.Net的Stopwatch类可以精确到1/10000毫秒, 有没有更精确的计时吗?

见下面的代码。暂时没试过效果,大家可以试下。


计算某个代码片段的执行时间,精确到CPU执行一条指令所用的时间(十亿分之一秒),可用于精确计算某个算法的执行时间。

 


代码:

C#
using System;using System.Runtime.InteropServices;using System.ComponentModel;using System.Threading;/// <summary>/// 作用:计算执行时间/// 说明:需依赖 Kernel32.dll/// </summary>
    public class PreciseTimer {
        [DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceCounter (out long lpPerformanceCount);
        [DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceFrequency(out long lpPerformanceFrequency);

        private long startTime;//开始时间
        private long stopTime;//终止时间
        private long requency;//频率

        /// <summary>
        /// 构造方法
        /// </summary>
        public PreciseTimer () {
            if (QueryPerformanceFrequency(out requency) == false) {
                throw new Win32Exception();
            }
        }

        /// <summary>
        /// 开始计时
        /// </summary>
        public void Start () {
            startTime = 0;
            stopTime = 0;
            Thread.Sleep(0);
            QueryPerformanceCounter(out startTime);
        }

        /// <summary>
        /// 停止计时
        /// </summary>
        public void Stop () {
            QueryPerformanceCounter(out stopTime);
        }

        /// <summary>
        /// 历时时长单位毫秒
        /// </summary>
        public double Duration {
            get {
                return (double)(stopTime - startTime) * 1000 / (double)requency;
            }
        }
    }


1、说明:

此类需依赖 Kernel32.dll 文件(window 自带),其中包含下列方法及属性

 属性:public double Duration  //记录时长单位毫秒

 构造方法:public PreciseTimer ()

 开始计时:public void Start ()

 停止计时:public void Stop ()

 

2、使用方法:

将 PreciseTimer.cs 加入项目中

在要计时的代码段中依次调用 Start()、Stop()方法,使用 Duration 属性获取时长。


3、例:

C#
PreciseTimer myTimer = new PreciseTimer();myTimer.Start();/*要计算执行时间的代码片*/myTimer.Stop();double times = myTimer.Duration;


#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。


扫描二维码推送至手机访问。

版权声明:本文由7点博客发布,如需转载请注明出处。

本文链接:http://6dot.cn/?id=47

标签: .NET.NET框架
分享给朋友:

“计算代码执行时间,可以精确到十亿分之一秒” 的相关文章

C#的propertygrid控件,选择和修改项目时很慢

C#的propertygrid控件,选择和修改项目时很慢

C#的propertygrid控件是很强。可以实现类似Vitual Studio属性面板那样的效果。但是。。。。我们一直痛苦它在选择和修改项目的时候很慢。我的用法是使用控件的SelectObject来绑定数据。C# PgridMotionSpeed.SelectedObject ...

C#中使用RegisterWindowMessage进行进程之间进行通讯

C#中使用RegisterWindowMessage进行进程之间进行通讯

注:大家都知道在window里,进程之间通讯可以用消息通讯。但是有个较冷门的知识就是RegisterWindowMessage。一般的sendmessage和postmessage是需要在窗体程序间进行通讯,你得知道对方窗口的句柄。这个句柄每次启动程序时是系统分配的,每次不一样。有了这个Regist...

C# tableLayoutPanel动态加载控件闪烁的解决方案

C# tableLayoutPanel动态加载控件闪烁的解决方案

WinForm加载多个自定义控件时,会出现很严重的闪烁问题,很卡,一块一块的加载(像打开网页时,网络很卡的那种感觉)简直没法忍受。在网上搜索了好久,网上大部分的方法是一下4种,但是都不能有效的解决问题。  1.将DoubleBuffered 设置 true,用双缓存处理Form界面内容加载,可以提高...

谈谈ObservableCollection观察者集合

谈谈ObservableCollection观察者集合

注:事件很常见,但有重复的代码量。如果你想简化一下事件的编程,而且是整个程序只使用一个像事件池一样的东西,可以尝试使用下文讲的ObservableCollection观察者集合来做到。ObservableCollection<T>类表示一个动态数据集合,在添加项,移除项或刷新整个列表时,...

C#测量程序运行时间及cpu使用时间

C#测量程序运行时间及cpu使用时间

对一个服务器程序想统计每秒可以处理多少数据包,要如何做?答案是用处理数据包的总数,除以累记处理数据包用的时间。这里要指出的是, 运行一段程序,使用的cpu时间,跟实际运行的时间是不一样的。附例如下:C#private void ShowRunTime() {...

C#:多进程开发,控制进程数量

C#:多进程开发,控制进程数量

正在c#程序优化时,如果多线程效果不佳的情况下,也会使用多进程的方案,如下:C#System.Threading.Tasks.Task task=System.Threading.Tasks.Task.Factory.StartNew(     &...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。