使用Benchmark.NET測試代碼性能

今天,咱們將研究如何使用Benchmark.Net來測試代碼性能。藉助基準測試,咱們能夠建立基準來驗證所作的更改是否按預期工做而且不會致使性能降低。app

並不是每一個項目都須要進行基準測試,可是若是您正在開發的是NuGet程序包或通用dll,則頗有意義。咱們將使用它來解決一個古老的問題,字符串拼接,好比下面這樣:函數

string myString = "string1" + "string2" + "string3" + "string4" + "string5";
Console.WriteLine(myString);

咱們不少人都知道建議使用StringBuilder做爲替代方法,而且速度要快得多,特別是在您有不少字符串的狀況下。工具

StringBuilder sb = new StringBuilder();
sb.Append("string1");
sb.Append("string2");
sb.Append("string3");
sb.Append("string4");
sb.Append("string5");
Console.WriteLine(sb.ToString());

Benchmark.NET

首先,咱們須要建立一個控制檯項目,BenchmarkTesting.App性能

接下來,咱們添加NuGet包 BenchmarkDotNet測試

而後,修改 program.cs文件中,把可訪問性改爲 publicui

如今咱們能夠建立一些測試方法,咱們直接修改program.cs, 每一個測試方法都須要 [Benchmark] 特性,我建立了三個示例,分別使用+運算符,Linq的Concat函數和使用StringBuilder拼接。線程

最後,在控制檯應用程序的Main入口點中,添加 BenchmarkRunning Run命令:翻譯

而後咱們使用下邊的命令運行測試,或者直接使用VS啓動項目,須要切換到Release模式下code

dotnet run -p BenchmarkTesting.app.csproj -c Release

運行大約須要幾分鐘,基準測試工具在後臺建立大量線程/做業並屢次運行測試,爲了得到一致的結果,建議最小化打開的應用程序,而且在運行時不要執行任何其餘操做,輸出以下所示,其中包含不少信息。orm

單位"us"是"μs"或微秒的縮寫,一微秒等於一毫秒的1/1000。

因而可知,StringBuilder要比+運算符效率更高,Linq Concat函數也相對高效,但仍是沒有StringBuilder快。

總結

拼接字符串時使用StringBuilder! 本篇文章只是簡單做的作了介紹,Benchmark.NET是測試性能的很是強大的工具,若是須要構建Nuget包,或者開發通用類庫時,這將是一種很好的測試方法。

原文連接: https://samlearnsazure.blog/2021/01/12/measuring-code-performance-with-benchmark-net/

最後

歡迎掃碼關注咱們的公衆號 【全球技術精選】,專一國外優秀博客的翻譯和開源項目分享,也能夠添加QQ羣 897216102

相關文章
相關標籤/搜索