C# 使用秒表类Stopwatch对程序的运行速度测试

1,281 阅读6分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第27天,点击查看活动详情

前言

你知道C#运行一个一百次循环要多久吗,一千次,一万次呢?今天这篇文章我们对这个问题去探索一下,顺便去学习一下Stopwatch秒表类,我们是使用这个类去对一个程序做一个运行速度的测试,在C#中这个类用的比较少,至少我是今天才用,虽然不是用的很灵活,但是我们可以一起去学一下,相信大家可以举一反三,哈哈哈,那么小弟在这献丑了,大家有更好的技术或者更好的方法,我们一起探讨一下,创作不易,大家点赞关注评论收藏,你的点赞是我创作的动力,也是我学习的方向!!!

ceeb653ely1g1ws2e1kjjj20du0f7q8r.jpg

界面设计

简单的设计一下,就触发我们的按钮,具体效果我们从后台观看,大家直接滑到效果即可。

image.png

Stopwatch方法

秒表实例可以测量一个间隔的经过时间,或跨多个间隔的总经过时间。在典型的秒表方案中,您调用Start方法,然后最终调用Stop方法,然后使用Elapsed属性检查经过的时间。秒表实例正在运行或已停止;使用IsRunning来确定Stopwatch的当前状态。使用Start开始测量经过的时间;使用Stop停止测量经过的时间。通过属性Elapsed、ElapsedMilliseconds或ElapsedTicks查询经过的时间值。您可以在实例运行或停止时查询经过的时间属性。秒表运行时,经过时间属性稳定增加;当实例停止时,它们保持不变。默认情况下,秒表实例的经过时间值等于所有测量时间间隔的总和。每次对Start的调用都从累积的经过时间开始计数;每次调用Stop都会结束当前的间隔测量并冻结累积的经过时间值。使用Reset方法清除现有Stopwatch实例中的累积经过时间。秒表通过计算底层计时器机制中的计时器滴答来测量经过的时间。如果安装的硬件和操作系统支持高分辨率性能计数器,则Stopwatch类使用该计数器来测量经过的时间。否则,Stopwatch类使用系统计时器来测量经过的时间。使用频率和IsHighResolution字段来确定秒表计时实现的精度和分辨率秒表类有助于在托管代码中操作与时间相关的性能计数器。具体来说,可以使用频率字段和GetTimestamp方法代替非托管 Windows APIQueryPerformanceFrequency和QueryPerformanceCounter.

Equals(Object)确定指定对象是否等于当前对象。
GetHashCode()用作默认哈希函数。
GetTimestamp()获取计时器机制中的当前滴答数。
GetType()获取当前实例的类型。
MemberwiseClone()创建当前Object的浅表副本。
Reset()停止时间间隔测量并将经过时间重置为零。
Restart()停止时间间隔测量,将经过时间重置为零,然后开始测量经过时间。
Start()开始或恢复,测量间隔的经过时间。
StartNew()初始化一个新的Stopwatch实例,将经过时间属性设置为零,并开始测量经过时间。
Stop()停止测量经过的时间间隔。
ToString()返回表示当前对象的字符串。
Elapsed获取当前实例测量的总经过时间。
ElapsedMilliseconds获取当前实例测量的总经过时间,以毫秒为单位。
ElapsedTicks获取当前实例测量的总经过时间,以计时器滴答为单位。
IsRunning获取一个值,该值指示秒表计时器是否正在运行。
Frequency获取计时器的频率,作为每秒的滴答数。该字段是只读的。
IsHighResolution指示计时器是否基于高分辨率性能计数器。该字段是只读的。

效果展示

之所以有些输出是0,是因为它的时间连毫秒都不到,所以才会为零,因为ElapsedMilliseconds是以毫秒为单位,所以看不到,如果运行太快连毫秒都不到建议使用ElapsedTicks,时间戳还是比较好用的。

image.png

代码逻辑

在复制代码的时候注意要把,命名空间给构造出来,使用ALT+Enter或者你复制using System.Diagnostics;这个命名空间在你的项目粘贴就可以了。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
​
namespace IC00test823
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
​
        private void button1_Click(object sender, EventArgs e)
        {
            Stopwatch TestTime = new Stopwatch(); //实列化Stopwatch类,如果你是复制记得按ALT+Enter键导入命名空间using System.Diagnostics;
            TestTime.Start();                    //使用Start()方法开始计时
            for (int i = 0; i < 100; i++)  //运行循环100次
            {
                int m = 0;
                m = i;
            }
            TestTime.Stop(); //使用Stop()方法暂停计时
            Console.WriteLine("100次的所用时间:" + TestTime.ElapsedMilliseconds);//看看重置后的间隔时间
            Console.WriteLine("100次的所用时间:" + TestTime.ElapsedTicks);//我们看看时间戳可能时间太快都不足毫秒的单位
            TestTime.Reset();   //使用Reset()对秒表类进行重置,从新从零开始
            Console.WriteLine("重置之后的所用时间:" + TestTime.ElapsedMilliseconds);//看看重置后的间隔时间
            Console.WriteLine("重置之后的所用时间:" + TestTime.ElapsedTicks);//我们看看时间戳可能时间太快都不足毫秒的单位
            TestTime.Restart();       //使用Restart方法是重置为零,并且开始计时相当于Reset()+Start()效果
            for (int i = 0; i < 1000; i++)
            {
                int m = 0;
                m = i;
            }
            TestTime.Stop();
            Console.WriteLine("1000次的所用时间:" + TestTime.ElapsedMilliseconds );    //看看运行1000次的时间
            Console.WriteLine("100次的所用时间:" + TestTime.Elapsed);//看看当前实例测量的总经过时间。
            TestTime.Restart();       //使用Restart方法是重置为零,并且开始计时相当于Reset()+Start()效果
            for (int i = 0; i < 10000; i++)
            {
                int m = 0;
                m = i;
            }
            TestTime.Stop();
            Console.WriteLine("10000次的所用时间:" + TestTime.ElapsedMilliseconds );    //看看运行1000次的时间
            Console.WriteLine("1000次的所用时间:" + TestTime.Elapsed);//看看当前实例测量的总经过时间。
            Console.WriteLine("1000次的所用时间:" + TestTime.ElapsedTicks);//实例测量的总经过时间,是个整数,Elapsed的另一种格式
​
        }
    }
}

总结

这篇文章比较简单,当然我们前面的问题,相信大家心里也已经知道答案了,虽然很简单,但是也是可以学到东西的,我们学习了新的知识,对我们的知识储备及技术又有新的一点点的进步,C#的技术就是先简单再难嘛,积少成多之后才会成长才会进步,我们要不断的学习不断的探索,才能有学习的动力,才会有学习的欲望,创作不易,点赞评论收藏关注,嘿嘿,不喜勿喷!!!!

12354689123110.gif