【愚公系列】2023年02月 .NET/C#知识点-程序运行计时的总结
文章目錄
- 前言
- 一、程序運(yùn)行計(jì)時(shí)的總結(jié)
- 1.Stopwatch
- 2.DateTime.Now
- 3.ValueStopwatch
前言
在分析一個(gè)程序算法時(shí)間復(fù)雜度時(shí),可以使用統(tǒng)計(jì)程序或程序片段的計(jì)算時(shí)間有助于理解程序性質(zhì),許多語(yǔ)言或系統(tǒng)都提供了內(nèi)部計(jì)時(shí)功能。
下面主要是講解C#中的計(jì)時(shí)方式:
- Stopwatch
- DateTime.Now
- ValueStopwatch
一、程序運(yùn)行計(jì)時(shí)的總結(jié)
1.Stopwatch
Stopwatch 一般用來測(cè)量代碼運(yùn)行消耗時(shí)間,以便獲取更多代碼運(yùn)行性能上的數(shù)據(jù)。運(yùn)行前先要調(diào)用 Start 函數(shù)來開始計(jì)時(shí),結(jié)束時(shí)需要用到 Stop 函數(shù)停止計(jì)時(shí),中間則可以插入需要監(jiān)測(cè)的代碼。如果有需要也還可以通過 Reset 或者 Restart 函數(shù)來重置計(jì)時(shí)器再開始下一次計(jì)時(shí)。
using System.Diagnostics;Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(999); sw.Stop(); Console.WriteLine($"程序耗時(shí):{sw.ElapsedMilliseconds}ms.");Console.ReadKey();2.DateTime.Now
DateTime是一個(gè)包含日期、時(shí)間的類型,此類型通過ToString()轉(zhuǎn)換為字符串時(shí),可根據(jù)傳入給Tostring()的參數(shù)轉(zhuǎn)換為多種字符串格式。
DateTime.Now主要是獲取當(dāng)前時(shí)間,所以也可以用于計(jì)算程序的執(zhí)行時(shí)間
var start = DateTime.Now; Thread.Sleep(999); var stop = DateTime.Now; Console.WriteLine($"程序耗時(shí):{(stop - start).TotalMilliseconds}ms."); Console.ReadKey();3.ValueStopwatch
ValueStopwatch主要是.NET Core才出現(xiàn)的,ValueStopwatch 的結(jié)構(gòu)體是為了減少使用 Stopwatch 帶來的內(nèi)存分配從而提高性能,本質(zhì)還是Stopwatch。
using System.Diagnostics;var watch = ValueStopwatch.StartNew(); Thread.Sleep(999); Console.WriteLine($"程序耗時(shí):{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);} }總結(jié)
以上是生活随笔為你收集整理的【愚公系列】2023年02月 .NET/C#知识点-程序运行计时的总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一次运行TestNG测试类时报Cann
- 下一篇: Baumer工业相机堡盟工业相机如何通过