當前位置: 妍妍網 > 碼農

.NET 中輕盈高效的計時器 ValueStopwatch

2024-03-23碼農

前言

ValueStopwatch是.NET中輕量級計時器,用於高效能時間測量。作為值型別,避免了裝箱拆箱開銷,記憶體占用小。

透過簡單的使用方法,輕松實作程式碼塊執行時間測量,且相比Stopwatch更為高效。

在.NET中,ValueStopwatch是一個輕量級的計時器類,用於測量程式碼塊的執行時間。

相較於System.Diagnostics.Stopwatch,它是一個值型別,提供更高的效能和更少的記憶體開銷。

功能

測量執行時間:計算程式碼塊的執行時間。

輕量級設計:使用值型別,減少裝箱和拆箱的開銷。

基本使用方法

1、 安裝 NuGet 包

Install-Package System.Diagnostics.PerformanceCounter -Version 5.0.0

2、 參照名稱空間:

using System.Diagnostics;

3、 建立和使用 ValueStopwatch

// 建立 ValueStopwatch 例項 ValueStopwatch stopwatch = ValueStopwatch.StartNew();

// 在此執行需要測量的程式碼塊 // 獲取經過的時間 TimeSpan elapsed = stopwatch.Elapsed;

優點

效能優越: 由於是值型別,避免了裝箱和拆箱操作,效能更高。

記憶體開銷小: 不使用物件參照,減少了記憶體占用。

高級套用

1、執行多次測量

using System;
classProgram
{
staticvoidMain()
{
// 建立 ValueStopwatch 例項
ValueStopwatch stopwatch = ValueStopwatch.StartNew();
// 執行多次需要測量的程式碼塊
for (int i = 0; i < 5; i++)
{
DoTimeConsumingOperation();
TimeSpan elapsed = stopwatch.Elapsed;
Console.WriteLine($"第 {i + 1} 次耗時:{elapsed.TotalMilliseconds} 毫秒");
}
}
staticvoidDoTimeConsumingOperation()
{
// 模擬耗時操作
for (int i = 0; i < 100000000; i++)
{
// 執行一些計算
var result = Math.Sqrt(i);
}
}
}


2、結合Stopwatch進行更精準測量

using System;
using System.Diagnostics;
classProgram
{
staticvoidMain()
{
// 建立 ValueStopwatch 例項
ValueStopwatch stopwatch = ValueStopwatch.StartNew();
// 使用 Stopwatch 進行更精準的測量
Stopwatch highPrecisionStopwatch = Stopwatch.StartNew();
// 在此執行需要測量的程式碼塊
highPrecisionStopwatch.Stop();
// 獲取經過的時間
TimeSpan elapsed = stopwatch.Elapsed;
TimeSpan highPrecisionElapsed = highPrecisionStopwatch.Elapsed;
Console.WriteLine($"ValueStopwatch 耗時:{elapsed.TotalMilliseconds} 毫秒");
Console.WriteLine($"高精度 Stopwatch 耗時:{highPrecisionElapsed.TotalMilliseconds} 毫秒");
}
}





相比Stopwatch的優點

輕量級設計:ValueStopwatch是值型別,避免了Stopwatch中一些物件參照的開銷,減小了記憶體占用。

無需初始化:ValueStopwatch不需要顯式初始化,直接使用StartNew即可開始計時,而Stopwatch需要呼叫Start方法。

透過以上方法,你可以更靈活地使用 ValueStopwatch,根據具體需求進行高級的套用和最佳化。

- EOF -

推薦閱讀 點選標題可跳轉

看完本文有收獲?請轉發分享給更多人

推薦關註「DotNet」,提升.Net技能

點贊和在看就是最大的支持❤️