今天介紹一個我腿了很久的東西,就是 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/