[.Net] 優雅的效能評估:BenchmarkDotNet讓測試變得輕鬆愜意

2024-01-11

今天介紹一個我腿了很久的東西,就是 BenchmarkDotNet ,有時候我們會必須要測試一個 function  或是某個新功能的效能

直接就是來個暴力跑個 Parallel.For 然後 在跑之前使用 Stopwatch 來測試,有時候看論壇都會出現一些在 console 中票票釀釀的表格

原來有一個套件可以解決,用起來也是非常的溫馨



1 . nuget 安裝 BenchmarkDotNet 

2.  之後就是程式碼的部分,這邊我主要測試 Dictionary  的 TeyGet 跟 ConcurrentDictionary 的 TryGet 哪一個效能比較好,主要在兩個 function 上面加上 [Benchmark] ,之後一行就直接執行跑分


這邊要注意一點,因為通常我們跑測試效能會扣除會盡量扣除掉變因,所以我們盡量都會跑 console 來做測試

一開始 Program 預設是 internal 記得改成 public 不然會出現錯誤 

CodeLabConsole.Program containing Benchmark method TestGetConcurrentDict has incorrect access modifiers.

Declaring type must be public.

執行狀況:

執行結果:



// * Summary *

BenchmarkDotNet , Windows 10 (10.0.19045.3803/22H2/2022Update) (Hyper-V)

Intel Xeon CPU E5-2696 v4 2.20GHz, 1 CPU, 16 logical and 8 physical cores

.NET SDK 8.0.100

  [Host]     : .NET 8.0.0 (8.0.23.53103), X64 RyuJIT AVX2

  DefaultJob : .NET 8.0.0 (8.0.23.53103), X64 RyuJIT AVX2


| Method                | Mean     | Error    | StdDev   |

|---------------------- |---------:|---------:|---------:|

| TestGetConcurrentDict | 21.64 ns | 0.679 ns | 1.991 ns |

| TestGetDict           | 20.25 ns | 0.639 ns | 1.854 ns |


這樣子其實測試就是方便很多,而且看起來還有很多方法可以做視覺化的呈現

主要是因為有時候看到許多範例 都會上面加上 [Benchmark] 就想了解一下到底是啥東西就突然發現的好用的套件

這邊有寫的詳細的文章

https://igouist.github.io/post/2021/06/benchmarkdotnet/






當麻許的超技八 2014 | Donma Hsu Design.