C# 计算耗时的三种方法

概述

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

方法一:stopwatch

  static void Main(string[] args)        {            Stopwatch sw = new Stopwatch();            sw.Start();            Thread.Sleep(999);            sw.Stop();            Console.WriteLine($"程序耗时:{sw.ElapsedMilliseconds}ms.");
            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.ElapsedMilliseconds}ms.");
            var start = DateTime.Now;            Thread.Sleep(999);            var stop = DateTime.Now;            Console.WriteLine($"程序耗时:{(stop - start).TotalMilliseconds}ms.");            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.ElapsedMilliseconds}ms.");
            //var start = DateTime.Now;            //Thread.Sleep(999);            //var stop = DateTime.Now;            //Console.WriteLine($"程序耗时:{(stop - start).TotalMilliseconds}ms.");
            var watch = ValueStopwatch.StartNew();            Thread.Sleep(999);            Console.WriteLine($"程序耗时:{watch.GetElapsedTime().TotalMilliseconds}ms.");            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.

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值