包一個Benchmark container.
雲環境加上Docker Container部屬,那我本機跑Benchmark哪會準呢?乾脆我把bechmark包進Contianer,然後再雲環境直接做效能檢測吧?
起心動念來弄一下,順便紀錄一下這件事情該怎麼做。
Introduction
BenchmarkDotNet
Benchmark是一個用來評估函式執行時間的工具,如果你厭倦了StopWatch + Console.WirteLine的無限循環,可以考慮用Benchmark來解決這些麻煩事;同時它可以做到重複測試,並提供了許多統計指標讓你評估受測函式的性能,測試結果也可以用多種方式儲存,寫報告找不到靈感?Benchmark直接糊他一頁,整個專業度都變高了。
這個套件同時有 .Net Foundation的支持,廣大的社群確保了你不會有出了問題找不到人求助的窘境。
Implement
我們採用最簡單的例子,來自官方的字串編碼做測試案例。
Install Benchmark
安裝Benchmark可以透過以下指令
dotnet add <project Name> package benchmarkdotnet -v <version>
Sample Code
1 | public class Md5VsSha256 |
這串sample code在官網的範例上就有,原文照著貼而已,但拿掉了一些針對不同framework的測試,只去測試專案使用的framework版本,這邊是用net core 3.1
接著在程式的進入點加入這行
1 | static void Main(string[] args) |
這樣就會針對Md5VsSha256這個Class去做測試,會尋找這個class裡面帶有[Benchmark]標籤的方法測試。
接著將執行方式改為Release
按下執行,執行結束後就可以看到執行結果了。
Release後的檔案也可以透過以下指令去做執行
dotnet <projectName>.dll
說穿了我們也是用這種方式寫在Dockerfile去包成Image而已。
這樣一來關於程式的部分就結束了,接著來處理Dockerfile.
Dockerfile
在Project目錄下新增Dockerfile
內容如下
1 | FROM mcr.microsoft.com/dotnet/sdk:3.1 |
接著執行
docker build -t benchmarktest .
包好image之後可以選擇上傳到私有的dockerhub或者任何地方,在受測環境Pull下來後執行
docker run benchmarktest
就可以得到一樣的統計報表了
當然你也可以改成輸出成html報表,只要掛volumn出來即可。
包一個Benchmark container.