【愚公系列】2023年02月 .NET/C#知识点-程序运行计时的总结
生活随笔
收集整理的這篇文章主要介紹了
【愚公系列】2023年02月 .NET/C#知识点-程序运行计时的总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 一、程序運行計時的總結
- 1.Stopwatch
- 2.DateTime.Now
- 3.ValueStopwatch
前言
在分析一個程序算法時間復雜度時,可以使用統計程序或程序片段的計算時間有助于理解程序性質,許多語言或系統都提供了內部計時功能。
下面主要是講解C#中的計時方式:
- Stopwatch
- DateTime.Now
- ValueStopwatch
一、程序運行計時的總結
1.Stopwatch
Stopwatch 一般用來測量代碼運行消耗時間,以便獲取更多代碼運行性能上的數據。運行前先要調用 Start 函數來開始計時,結束時需要用到 Stop 函數停止計時,中間則可以插入需要監測的代碼。如果有需要也還可以通過 Reset 或者 Restart 函數來重置計時器再開始下一次計時。
using System.Diagnostics;Stopwatch sw = new Stopwatch(); sw.Start(); Thread.Sleep(999); sw.Stop(); Console.WriteLine($"程序耗時:{sw.ElapsedMilliseconds}ms.");Console.ReadKey();2.DateTime.Now
DateTime是一個包含日期、時間的類型,此類型通過ToString()轉換為字符串時,可根據傳入給Tostring()的參數轉換為多種字符串格式。
DateTime.Now主要是獲取當前時間,所以也可以用于計算程序的執行時間
var start = DateTime.Now; Thread.Sleep(999); var stop = DateTime.Now; Console.WriteLine($"程序耗時:{(stop - start).TotalMilliseconds}ms."); Console.ReadKey();3.ValueStopwatch
ValueStopwatch主要是.NET Core才出現的,ValueStopwatch 的結構體是為了減少使用 Stopwatch 帶來的內存分配從而提高性能,本質還是Stopwatch。
using System.Diagnostics;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);} }總結
以上是生活随笔為你收集整理的【愚公系列】2023年02月 .NET/C#知识点-程序运行计时的总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一次运行TestNG测试类时报Cann
- 下一篇: python 分析外汇数据_Python