C# 计算耗时的三种方法

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 计算耗时的三种方法相关的知识,希望对你有一定的参考价值。

概述

     计算一段程序的耗时是我们在编程中很常见的用法,那这节内容就通过实例的方式来演示几种常用的统计耗时的方法.

方法一:stopwatch

static void Main(string[] args)
        
            Stopwatch sw = new Stopwatch();
            sw.Start();
            Thread.Sleep(999);
            sw.Stop();
            Console.WriteLine($"程序耗时:sw.ElapsedMillisecondsms.");


            Console.ReadKey();
        

最常用的计算耗时的就是使用Stopwatch,使用的时候需要引用命名空间:System.Diagnostics.

运行结果:

程序耗时:1012ms.

方法二:DateTime.Now

static void Main(string[] args)
        
            //Stopwatch sw = new Stopwatch();
            //sw.Start();
            //Thread.Sleep(999);
            //sw.Stop();
            //Console.WriteLine($"程序耗时:sw.ElapsedMillisecondsms.");


            var start = DateTime.Now;
            Thread.Sleep(999);
            var stop = DateTime.Now;
            Console.WriteLine($"程序耗时:(stop - start).TotalMillisecondsms.");
            Console.ReadKey();
        

运行结果:

程序耗时:1012.2267ms.

方法二:ValueStopwatch

用法举例如下:

using System;
using System.Diagnostics;
using System.Threading;


namespace ConsoleApp27

    class Program
     
        static void Main(string[] args)
        
            //Stopwatch sw = new Stopwatch();
            //sw.Start();
            //Thread.Sleep(999);
            //sw.Stop();
            //Console.WriteLine($"程序耗时:sw.ElapsedMillisecondsms.");


            //var start = DateTime.Now;
            //Thread.Sleep(999);
            //var stop = DateTime.Now;
            //Console.WriteLine($"程序耗时:(stop - start).TotalMillisecondsms.");


            var watch = ValueStopwatch.StartNew();
            Thread.Sleep(999);
            Console.WriteLine($"程序耗时:watch.GetElapsedTime().TotalMillisecondsms.");
            Console.ReadKey();
        
    


    internal struct ValueStopwatch
    
        private static readonly double TimestampToTicks = TimeSpan.TicksPerSecond / (double)Stopwatch.Frequency;


        private readonly long _startTimestamp;


        public bool IsActive => _startTimestamp != 0;


        private ValueStopwatch(long startTimestamp)
        
            _startTimestamp = startTimestamp;
        


        public static ValueStopwatch StartNew() => new ValueStopwatch(Stopwatch.GetTimestamp());


        public TimeSpan GetElapsedTime()
        
            // Start timestamp can't be zero in an initialized ValueStopwatch. It would have to be literally the first thing executed when the machine boots to be 0.
            // So it being 0 is a clear indication of default(ValueStopwatch)
            if (!IsActive)
            
                throw new InvalidOperationException("An uninitialized, or 'default', ValueStopwatch cannot be used to get elapsed time.");
            


            var end = Stopwatch.GetTimestamp();
            var timestampDelta = end - _startTimestamp;
            var ticks = (long)(TimestampToTicks * timestampDelta);
            return new TimeSpan(ticks);
        
    




运行结果:

程序耗时:1008.0426ms.

以上是关于C# 计算耗时的三种方法的主要内容,如果未能解决你的问题,请参考以下文章

C#计算一段程序运行时间的三种方法

C#中Math类的计算整数的三种方法

寻找素数的三种算法,一个比一个快

URL转Drawable之 Android中获取网络图片的三种方法

C#使用DataSet Datatable更新数据库的三种实现方法

C# 中使用using的三种方法