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

Posted on   樱木007  阅读(361)  评论(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

 
复制代码

 

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义

随笔 - 88, 文章 - 0, 评论 - 18, 阅读 - 47077

Copyright © 2025 樱木007
Powered by .NET 9.0 on Kubernetes

点击右上角即可分享
微信分享提示