C#使用Stopwatch实现计时功能

 更新时间:2024年03月26日 14:42:18   作者:追逐时光者  
在 C# 中,Stopwatch 类是用于测量经过的时间的工具类,提供了高精度的计时功能,本文主要介绍了C#如何使用Stopwatch实现计时功能,需要的可以参考下

前言

在 C# 中,Stopwatch 类是用于测量经过的时间的工具类,提供了高精度的计时功能。Stopwatch 类位于 System.Diagnostics 命名空间中。通常情况下,使用 Stopwatch 的流程是创建一个 Stopwatch 对象,然后调用 Start 方法开始计时,执行需要测量时间的代码,最后调用 Stop 方法停止计时,并通过 Elapsed 属性获取经过的时间。

Stopwatch 类中常用的方法包括

Start():开始计时。

Stop():停止计时。

Reset():重置计时器。

Restart():重启计时器。

Elapsed:获取经过的时间(Elapsed 属性返回一个 TimeSpan 对象,表示自 Stopwatch 实例开始计时以来经过的时间。你可以通过访问 Elapsed 属性来获取经过的时间)

ElapsedMilliseconds:回一个 long 值,表示自 Stopwatch 实例开始计时以来经过的毫秒数。

ElapsedTicks:返回一个 long 值,表示自 Stopwatch 实例开始计时以来经过的计时周期数。这个值通常用于更精确的时间测量。

使用示例

using System;
using System.Diagnostics;
 
class Program
{
    static void Main()
    {
        Stopwatch stopwatch = new Stopwatch();
 
        stopwatch.Start();
 
        // 模拟耗时操作
        for (int i = 0; i < 1000000; i++)
        {
            // do something
        }
 
        stopwatch.Stop();
 
        Console.WriteLine($"经过的时间: {stopwatch.Elapsed}");
    }
}

使用总结

通过使用 Stopwatch 类,开发人员可以更准确地测量代码执行的时间,进行性能分析和优化,从而提升应用程序的性能表现。

知识补充

除了上文的内容,小编还为大家整理一些Stopwatch类的其他应用,希望对大家有所帮助

C# StopWatch 实现程序精准计时

下面的示例演示如何使用Stopwatch类来确定应用程序的执行时间。

using System;
using System.Diagnostics;
using System.Threading;
class Program
{
    static void Main(string[] args)
    {
        Stopwatch stopWatch = new Stopwatch();
        // 开始
        stopWatch.Start();
		
		// 程序执行
        Thread.Sleep(10000);
        
        // 结束
        stopWatch.Stop();
        
        // 获取作为 TimeSpan 值的经过时间。
        TimeSpan ts = stopWatch.Elapsed;

        // 格式化
        string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
            ts.Hours, ts.Minutes, ts.Seconds,
            ts.Milliseconds / 10);

	    // 打印时间差
        Console.WriteLine("RunTime " + elapsedTime);
    }
}

Stopwatch还可以来计算性能数据,示例代码如下:

using System;
using System.Diagnostics;

namespace StopWatchSample
{
    class OperationsTimer
    {
        public static void Main()
        {
            DisplayTimerProperties();

            Console.WriteLine();
            Console.WriteLine("Press the Enter key to begin:");
            Console.ReadLine();
            Console.WriteLine();

            TimeOperations();
        }

        public static void DisplayTimerProperties()
        {
            // Display the timer frequency and resolution.
            if (Stopwatch.IsHighResolution)
            {
                Console.WriteLine("Operations timed using the system's high-resolution performance counter.");
            }
            else
            {
                Console.WriteLine("Operations timed using the DateTime class.");
            }

            long frequency = Stopwatch.Frequency;
            Console.WriteLine("  Timer frequency in ticks per second = {0}",
                frequency);
            long nanosecPerTick = (1000L*1000L*1000L) / frequency;
            Console.WriteLine("  Timer is accurate within {0} nanoseconds",
                nanosecPerTick);
        }

        private static void TimeOperations()
        {
            long nanosecPerTick = (1000L*1000L*1000L) / Stopwatch.Frequency;
            const long numIterations = 10000;

            // Define the operation title names.
            String [] operationNames = {"Operation: Int32.Parse(\"0\")",
                                           "Operation: Int32.TryParse(\"0\")",
                                           "Operation: Int32.Parse(\"a\")",
                                           "Operation: Int32.TryParse(\"a\")"};

            // Time four different implementations for parsing
            // an integer from a string.

            for (int operation = 0; operation <= 3; operation++)
            {
                // Define variables for operation statistics.
                long numTicks = 0;
                long numRollovers = 0;
                long maxTicks = 0;
                long minTicks = Int64.MaxValue;
                int indexFastest = -1;
                int indexSlowest = -1;
                long milliSec = 0;

                Stopwatch time10kOperations = Stopwatch.StartNew();

                // Run the current operation 10001 times.
                // The first execution time will be tossed
                // out, since it can skew the average time.

                for (int i=0; i<=numIterations; i++)
                {
                    long ticksThisTime = 0;
                    int inputNum;
                    Stopwatch timePerParse;

                    switch (operation)
                    {
                        case 0:
                            // Parse a valid integer using
                            // a try-catch statement.

                            // Start a new stopwatch timer.
                            timePerParse = Stopwatch.StartNew();

                            try
                            {
                                inputNum = Int32.Parse("0");
                            }
                            catch (FormatException)
                            {
                                inputNum = 0;
                            }

                            // Stop the timer, and save the
                            // elapsed ticks for the operation.

                            timePerParse.Stop();
                            ticksThisTime = timePerParse.ElapsedTicks;
                            break;
                        case 1:
                            // Parse a valid integer using
                            // the TryParse statement.

                            // Start a new stopwatch timer.
                            timePerParse = Stopwatch.StartNew();

                            if (!Int32.TryParse("0", out inputNum))
                            {
                                inputNum = 0;
                            }

                            // Stop the timer, and save the
                            // elapsed ticks for the operation.
                            timePerParse.Stop();
                            ticksThisTime = timePerParse.ElapsedTicks;
                            break;
                        case 2:
                            // Parse an invalid value using
                            // a try-catch statement.

                            // Start a new stopwatch timer.
                            timePerParse = Stopwatch.StartNew();

                            try
                            {
                                inputNum = Int32.Parse("a");
                            }
                            catch (FormatException)
                            {
                                inputNum = 0;
                            }

                            // Stop the timer, and save the
                            // elapsed ticks for the operation.
                            timePerParse.Stop();
                            ticksThisTime = timePerParse.ElapsedTicks;
                            break;
                        case 3:
                            // Parse an invalid value using
                            // the TryParse statement.

                            // Start a new stopwatch timer.
                            timePerParse = Stopwatch.StartNew();

                            if (!Int32.TryParse("a", out inputNum))
                            {
                                inputNum = 0;
                            }

                            // Stop the timer, and save the
                            // elapsed ticks for the operation.
                            timePerParse.Stop();
                            ticksThisTime = timePerParse.ElapsedTicks;
                            break;

                        default:
                            break;
                    }

                    // Skip over the time for the first operation,
                    // just in case it caused a one-time
                    // performance hit.
                    if (i == 0)
                    {
                        time10kOperations.Reset();
                        time10kOperations.Start();
                    }
                    else
                    {

                        // Update operation statistics
                        // for iterations 1-10000.
                        if (maxTicks < ticksThisTime)
                        {
                            indexSlowest = i;
                            maxTicks = ticksThisTime;
                        }
                        if (minTicks > ticksThisTime)
                        {
                            indexFastest = i;
                            minTicks = ticksThisTime;
                        }
                        numTicks += ticksThisTime;
                        if (numTicks < ticksThisTime)
                        {
                            // Keep track of rollovers.
                            numRollovers ++;
                        }
                    }
                }

                // Display the statistics for 10000 iterations.

                time10kOperations.Stop();
                milliSec = time10kOperations.ElapsedMilliseconds;

                Console.WriteLine();
                Console.WriteLine("{0} Summary:", operationNames[operation]);
                Console.WriteLine("  Slowest time:  #{0}/{1} = {2} ticks",
                    indexSlowest, numIterations, maxTicks);
                Console.WriteLine("  Fastest time:  #{0}/{1} = {2} ticks",
                    indexFastest, numIterations, minTicks);
                Console.WriteLine("  Average time:  {0} ticks = {1} nanoseconds",
                    numTicks / numIterations,
                    (numTicks * nanosecPerTick) / numIterations );
                Console.WriteLine("  Total time looping through {0} operations: {1} milliseconds",
                    numIterations, milliSec);
            }
        }
     }
}

Stopwatch实现对程序运行的精确计时

demo

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace StopWatchDemo
{
    class Program
    {
       
        static void Main(string[] args)
        {
            int i = 6000000,m1= 0,m2=0;
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int k = 0; k <= i; k++)
            {
                m1++;
            }
            Console.WriteLine(sw.ElapsedMilliseconds);
            sw.Restart();
            for (int k = 0; k <= i; k+=2) 
            {
                m2++;
            }
            sw.Stop();
            Console.WriteLine(sw.ElapsedMilliseconds);
            Console.ReadKey();
        }
    }
}

到此这篇关于C#使用Stopwatch实现计时功能的文章就介绍到这了,更多相关C# Stopwatch计时内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#使用udp如何实现消息的接收和发送

    C#使用udp如何实现消息的接收和发送

    这篇文章主要介绍了C#使用udp如何实现消息的接收和发送问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C#如何通过RFC连接sap系统

    C#如何通过RFC连接sap系统

    这篇文章主要为大家详细介绍了C#如何通过RFC连接sap系统的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 深入c#绘制验证码的详解

    深入c#绘制验证码的详解

    本篇文章是对用c#绘制验证码的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • C#中Winform窗体Form的关闭按钮变灰色的方法

    C#中Winform窗体Form的关闭按钮变灰色的方法

    这篇文章主要介绍了C#中Winform窗体Form的关闭按钮变灰色的方法,对于C#程序界面的设计有一定的借鉴价值,需要的朋友可以参考下
    2014-08-08
  • WPF实现抽屉菜单效果的示例代码

    WPF实现抽屉菜单效果的示例代码

    这篇文章主要介绍了如何利用WPF实现抽屉菜单效果,文中的示例代码讲解详细,对我们学习或工作有一定帮助,需要的可以参考一下
    2022-08-08
  • C#使用System.Threading.Timer实现计时器的示例详解

    C#使用System.Threading.Timer实现计时器的示例详解

    以往一般都是用 System.Timers.Timer 来做计时器,其实 System.Threading.Timer 也可以实现计时器功能,下面就跟随小编一起来学习一下如何使用System.Threading.Timer实现计时器功能吧
    2024-01-01
  • C#中参数数组、引用参数和输出参数示例详解

    C#中参数数组、引用参数和输出参数示例详解

    这篇文章主要给大家介绍了关于C#中参数数组、引用参数和输出参数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • WinForm实现的图片拖拽与缩放功能示例

    WinForm实现的图片拖拽与缩放功能示例

    这篇文章主要介绍了WinForm实现的图片拖拽与缩放功能,结合具体实例形式分析了WinForm鼠标事件响应及图片元素动态操作相关实现技巧,需要的朋友可以参考下
    2017-05-05
  • C#实现顺序栈和链栈的代码实例

    C#实现顺序栈和链栈的代码实例

    今天小编就为大家分享一篇关于的C#实现顺序栈和链栈的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • c# 判断指定文件是否存在的简单实现

    c# 判断指定文件是否存在的简单实现

    这篇文章主要介绍了c# 判断指定文件是否存在的简单实现,需要的朋友可以参考下
    2014-02-02

最新评论