C#小技巧---计算耗时的三种方法

Posted on 2022-10-07 11:10  樱木007  阅读(323)  评论(0编辑  收藏  举报

1.使用DateTime.Now计算

        static void Main(string[] args)
        {
            var begin = DateTime.Now;
            Thread.Sleep(2000);
            var end = DateTime.Now;
            Console.WriteLine($"程序耗时:{(end - begin).TotalMilliseconds}ms.");
            Console.ReadLine();
        }

2.使用Stopwatch计算

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

namespace CountConsumeTime
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch sw = new Stopwatch();
            sw.Start();
            Thread.Sleep(2000);
            sw.Stop();
            Console.WriteLine($"程序耗时:{sw.ElapsedMilliseconds}ms.");
            Console.ReadLine();
        }
    }
}

3.使用ValueStopwatch
using System;
using System.Diagnostics;
using System.Threading;

namespace CountConsumeTime
{
    class Program
    {
        static void Main(string[] args)
        {
            var watch = ValueStopwatch.StartNew();
            Thread.Sleep(999);
            Console.WriteLine($"程序耗时:{watch.GetElapsedTime().TotalMilliseconds}ms.");
            Console.ReadLine();
        }
    }
    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);
        }
    }
}

参考链接:https://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA==&mid=2654093868&idx=4&sn=06edd0f261fd87c4630502f6dac480d8&chksm=80d86679b7afef6f65ee04a9af70b16114ae4f9b972921a490c2379681fcca93daba13b762c0&mpshare=1&scene=1&srcid=1007wH9I6vaqlbScd5hpRGzf&sharer_sharetime=1665110439935&sharer_shareid=ce8f0eb2c8cd0f35d3180b1d63b09c6e#rd

 

 

Copyright © 2024 樱木007
Powered by .NET 8.0 on Kubernetes