zoukankan      html  css  js  c++  java
  • C# Stopwatch详解

    C# Stopwatch详解

    namespace System.Diagnostics  {  
        //  
        // 摘要:  
        //     提供一组方法和属性,可用于准确地测量运行时间。  
        public class Stopwatch  {  
            //  
            // 摘要:  
            //     获取以每秒计时周期数表示的计时器频率。此字段为只读。  
            public static readonly long Frequency;  
            //  
            // 摘要:  
            //     指示计时器是否基于高分辨率性能计数器。此字段为只读。  
            public static readonly bool IsHighResolution;  
      
            //  
            // 摘要:  
            //     初始化 System.Diagnostics.Stopwatch 类的新实例。  
            public Stopwatch();  
      
            //  
            // 摘要:  
            //     获取当前实例测量得出的总运行时间。  
            //  
            // 返回结果:  
            //     一个只读的 System.TimeSpan,用于表示当前实例测量得出的总运行时间。  
            public TimeSpan Elapsed { get; }  
            //  
            // 摘要:  
            //     获取当前实例测量得出的总运行时间(以毫秒为单位)。  
            //  
            // 返回结果:  
            //     一个只读长整型,表示当前实例测量得出的总毫秒数。  
            public long ElapsedMilliseconds { get; }  
            //  
            // 摘要:  
            //     获取当前实例测量得出的总运行时间(用计时器计时周期表示)。  
            //  
            // 返回结果:  
            //     一个只读长整型,表示当前实例测量得出的计时器计时周期的总数。  
            public long ElapsedTicks { get; }  
            //  
            // 摘要:  
            //     获取一个指示 System.Diagnostics.Stopwatch 计时器是否在运行的值。  
            //  
            // 返回结果:  
            //     如果 System.Diagnostics.Stopwatch 实例当前正在运行,并且在对某个时间间隔的运行时间进行测量,则该值为 true;否则为 false。  
            public bool IsRunning { get; }  
      
            //  
            // 摘要:  
            //     获取计时器机制中的当前最小时间单位数。  
            //  
            // 返回结果:  
            //     一个长整型,表示基础计时器机制中的计时周期计数器值。  
            public static long GetTimestamp();  
            //  
            // 摘要:  
            //     对新的 System.Diagnostics.Stopwatch 实例进行初始化,将运行时间属性设置为零,然后开始测量运行时间。  
            //  
            // 返回结果:  
            //     刚刚开始测量运行时间的 System.Diagnostics.Stopwatch。  
            public static Stopwatch StartNew();  
            //  
            // 摘要:  
            //     停止时间间隔测量,并将运行时间重置为零。  
            public void Reset();  
            //  
            // 摘要:  
            //     停止时间间隔测量,将运行时间重置为零,然后开始测量运行时间。  
            public void Restart();  
            //  
            // 摘要:  
            //     开始或继续测量某个时间间隔的运行时间。  
            public void Start();  
            //  
            // 摘要:  
            //     停止测量某个时间间隔的运行时间。  
            public void Stop();  
        }  
    }  

    Stopwatch的命名空间是using System.Diagnostics;

    从上文看到Restart()等于Reset()加Start()

    使用流程如下

    Stopwatch sw = new Stopwatch();  
    //开始计时  
    sw.Start();  
    //重新设置为零  
    sw.Reset();  
    //重新设置并开始计时  
    sw.Restart();  
    //结束计时  
    sw.Stop();  
    //获取运行时间间隔  
    TimeSpan ts = sw.Elapsed;  
    //获取运行时间[毫秒]  
    long times = sw.ElapsedMilliseconds;  
    //获取运行的总时间  
    long times2 = sw.ElapsedTicks;  
    //判断计时是否正在进行[true为计时]  
    bool isrun = sw.IsRunning;  
    //获取计时频率  
    long frequency = Stopwatch.Frequency;  
    

    Stopwatch 在基础计时器机制中对计时器的计时周期进行计数,从而测量运行时间。 如果安装的硬件和操作系统支持高分辨率性能计数器,则 Stopwatch 类将使用该计数器来测量运行时间; 否则,Stopwatch 类将使用系统计数器来测量运行时间。 使用 Frequency 和 IsHighResolution 字段可以确定实现 Stopwatch 计时的精度和分辨率。

    TimeSpan 对象表示时间间隔或持续时间,按正负天数、小时数、分钟数、秒数以及秒的小数部分进行度量。用于度量持续时间的最大时间单位是天。更大的时间单位(如月和年)的天数不同,因此为保持一致性,时间间隔以天为单位来度量。

    TimeSpan 对象的值是等于所表示时间间隔的刻度数。一个刻度等于 100 纳秒,TimeSpan 对象的值的范围在 MinValue 和 MaxValue 之间。

    TimeSpan 值可以表示为 [-]d.hh:mm:ss.ff,其中减号是可选的,它指示负时间间隔,d 分量表示天,hh 表示小时(24 小时制),mm 表示分钟,ss 表示秒,而 ff 为秒的小数部分。即,时间间隔包括整的正负天数、天数和剩余的不足一天的时长,或者只包含不足一天的时长。例如,初始化为 1.0e+13 刻度的 TimeSpan 对象的文本表示“11.13:46:40”,即 11 天,13 小时,46 分钟和 40 秒。

    举个例子

    Stopwatch sw = new Stopwatch();  
    //开始计时  
    sw.Start();  
      
    //5.SqlQuery()查询  
    var sql = "select * from UserInfo where age > 15 order by age desc";  
    object[] obj = new object[1];  
    var info = db.UserInfo.SqlQuery(sql, obj);  
      
    foreach (var item in info)  
    {  
        richTextBox1.Text += "姓名:" + item.Name + " 年龄:" + item.Age + "\n";  
    }  
                      
    //结束计时  
    sw.Stop();  
    //获取运行时间[毫秒]  
    long times = sw.ElapsedMilliseconds;  
    richTextBox1.Text += "执行查询总共使用了" + times + "毫秒";  
    

    第一次查询

    姓名:老马                                                 年龄:55  
    姓名:飞哥                                                 年龄:22  
    姓名:李四                                                 年龄:20  
    姓名:张三                                                 年龄:18  
    执行查询总共使用了500毫秒  

    第二次查询

    姓名:老马                                                 年龄:55  
    姓名:飞哥                                                 年龄:22  
    姓名:李四                                                 年龄:20  
    姓名:张三                                                 年龄:18  
    执行查询总共使用了4毫秒  

    为什么两次查询耗时差距那么大?应为EF和sql执行查询缓存的问题造成。

  • 相关阅读:
    Hibernate学习笔记(一)
    mysql内联接、左联接、右联接
    mysql表数据增删改查、子查询
    mysql建表时候的五种约束
    mysql数据库基本数据类型
    nginx uwsgi flask相关配置
    关于爬虫数据的解析器设计
    Redis 七月小说网的爬虫缓存设计
    MariaDB 数据库迁移
    React Relay 实现
  • 原文地址:https://www.cnblogs.com/grj001/p/12225193.html
Copyright © 2011-2022 走看看