1. 程式人生 > >使用 Benchmark.NET 測試程式碼效能

使用 Benchmark.NET 測試程式碼效能

![](https://blog-1259586045.cos.ap-shanghai.myqcloud.com/clipboard_20210215_090255.png) 今天,我們將研究如何使用Benchmark.Net來測試程式碼效能。藉助基準測試,我們可以建立基準來驗證所做的更改是否按預期工作並且不會導致效能下降。 並非每個專案都需要進行基準測試,但是如果您正在開發的是NuGet程式包或通用dll,則很有意義。我們將使用它來解決一個古老的問題,字串拼接,比如下面這樣: ```csharp string myString = "string1" + "string2" + "string3" + "string4" + "string5"; Console.WriteLine(myString); ``` 我們很多人都知道建議使用StringBuilder作為替代方法,並且速度要快得多,特別是在您有很多字串的情況下。 ```csharp 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` ![](https://blog-1259586045.cos.ap-shanghai.myqcloud.com/clipboard_20210215_074755.png) 接下來,我們新增NuGet包 `BenchmarkDotNet` ![](https://blog-1259586045.cos.ap-shanghai.myqcloud.com/clipboard_20210215_074911.png) 然後,修改 program.cs檔案中,把可訪問性改成 public ![](https://blog-1259586045.cos.ap-shanghai.myqcloud.com/clipboard_20210215_080926.png) 現在我們可以建立一些測試方法,我們直接修改program.cs, 每個測試方法都需要 `[Benchmark]` 特性,我建立了三個示例,分別使用+運算子,Linq的Concat函式和使用StringBuilder拼接。 ![](https://blog-1259586045.cos.ap-shanghai.myqcloud.com/clipboard_20210215_081407.png) 最後,在控制檯應用程式的Main入口點中,新增 BenchmarkRunning Run命令: ![](https://blog-1259586045.cos.ap-shanghai.myqcloud.com/clipboard_20210215_083736.png) 然後我們使用下邊的命令執行測試,或者直接使用VS啟動專案,需要切換到Release模式下 ```csharp dotnet run -p BenchmarkTesting.app.csproj -c Release ``` 執行大約需要幾分鐘,基準測試工具在後臺建立大量執行緒/作業並多次執行測試,為了獲得一致的結果,建議最小化開啟的應用程式,並且在執行時不要執行任何其他操作,輸出如下所示,其中包含很多資訊。 ![](https://blog-1259586045.cos.ap-shanghai.myqcloud.com/clipboard_20210215_084040.png) 單位"us"是"μs"或微秒的縮寫,一微秒等於一毫秒的1/1000。 由此可見,StringBuilder要比+運算子效率更高,Linq Concat函式也相對高效,但還是沒有StringBuilder快。 ## 總結 拼接字串時使用StringBuilder! 本篇文章只是簡單作的做了介紹,Benchmark.NET是測試效能的非常強大的工具,如果需要構建Nuget包,或者開發通用類庫時,這將是一種很好的測試方法。 > 原文連結: [https://samlearnsazure.blog/2021/01/12/measuring-code-performance-with-benchmark-net/]("https://rehansaeed.com/deep-dive-into-open-telemetry-for-net/") ### 最後 歡迎掃碼關注我們的公眾號 【全球技術精選】,專注國外優秀部落格的翻譯和開源專案分享,也可以新增QQ群 897216102

相關推薦

使用 Benchmark.NET 測試程式碼效能

![](https://blog-1259586045.cos.ap-shanghai.myqcloud.com/clipboard_20210215_090255.png) 今天,我們將研究如何使用Benchmark.Net來測試程式碼效能。藉助基準測試,我們可以建立基準來驗證所做的更改是否按預期工作並且

使用 BenchmarkDotnet 測試程式碼效能

原文: 使用 BenchmarkDotnet 測試程式碼效能 先來點題外話,清明節前把工作辭了(去 tm 的垃圾團隊,各種拉幫結派、勾心鬥角)。這次找工作就得慢慢找了,不能急了,希望能找到個好團隊,好崗位吧。順便這段時間也算是比較閒,也能學習一下和填掉手上的坑。 說實話好久沒寫部落格了,一個是手上的工作確

.net測試程式碼執行時間

原文:http://bbs.csdn.net/topics/390664189 System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch (); sw.Start(); //你的程式碼 sw.St

【Redis】Redis-benchmark測試Redis效能

  Redis-benchmark是官方自帶的Redis效能測試工具,可以有效的測試Redis服務的效能。   使用說明如下: 1 Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n

Redis-benchmark測試Redis效能

10000 requests completed in 0.30 seconds100 parallel clients3 bytes payload keep alive: 10.11% <= 1 milliseconds86.00% <= 2 milliseconds90.12% &

提高C++效能的程式設計技術筆記:多執行緒記憶體池+測試程式碼

為了使多個執行緒併發地分配和釋放記憶體,必須在分配器方法中新增互斥鎖。 全域性記憶體管理器(通過new()和delete()實現)是通用的,因此它的開銷也非常大。 因為單執行緒記憶體管理器要比多執行緒記憶體管理器快的多,所以如果要分配的大多數記憶體塊限於單執行緒中使用,那麼可以顯著提升效

提高C++效能的程式設計技術筆記:單執行緒記憶體池+測試程式碼

頻繁地分配和回收記憶體會嚴重地降低程式的效能。效能降低的原因在於預設的記憶體管理是通用的。應用程式可能會以某種特定的方式使用記憶體,並且為不需要的功能付出效能上的代價。通過開發專用的記憶體管理器可以解決這個問題。對專用記憶體管理器的設計可以從多個角度考慮。我們至少可以想到兩個方面:大小和併發。

提高C++效能的程式設計技術筆記:臨時物件+測試程式碼

型別不匹配:一般情況是指當需要X型別的物件時提供的卻是其它型別的物件。編譯器需要以某種方式將提供的型別轉換成要求的X型別。這一過程可能會產生臨時物件。 按值傳遞:建立和銷燬臨時物件的代價是比較高的。倘若可以,我們應該按指標或者引用來傳遞物件以避免生成臨時物件。 按值返回:如果編寫的函式是

提高C++效能的程式設計技術筆記:建構函式和解構函式+測試程式碼

物件的建立和銷燬往往會造成效能的損失。在繼承層次中,物件的建立將引起其先輩的建立。物件的銷燬也是如此。其次,物件相關的開銷與物件本身的派生鏈的長度和複雜性相關。所建立的物件(以及其後銷燬的物件)的數量與派生的複雜度成正比。 並不是說繼承根本上就是程式碼效能的絆腳石。我們必須區分全部計算開銷、

提高C++效能的程式設計技術筆記:虛擬函式、返回值優化+測試程式碼

虛擬函式:在以下幾個方面,虛擬函式可能會造成效能損失:建構函式必須初始化vptr(虛擬函式表);虛擬函式是通過指標間接呼叫的,所以必須先得到指向虛擬函式表的指標,然後再獲得正確的函式偏移量;內聯是在編譯時決定的,編譯器不可能把執行時才解析的虛擬函式設定為內聯。 無法內聯虛擬函式造成的效能損失

JMH實踐-程式碼效能測試工具

概述 JMH,即Java Microbenchmark Harness,是專門用於程式碼微基準測試的工具套件 JMH比較典型的應用場景有: 想準確的知道某個方法需要執行多長時間,以及執行時間和輸入之間的相關性; 對比介面不同實現在給定條件下的吞吐量; 檢視多少百分比

docker搭建linux叢集,搭建mpi環境,並使用MTT benchmark測試叢集效能

最近在研究docker,早些時候老闆讓做了一個open mpi的image,並在單機環境下,成功使用docker搭建了一個openmpi的叢集,可以跑一些hello world的例子,後來,在ubuntu環境下,使用openvswitch搭建了一個多host的叢

提高C++效能的程式設計技術筆記:內聯+測試程式碼

內聯類似於巨集,在呼叫方法內部展開被呼叫方法,以此來代替方法的呼叫。一般來說表達內聯意圖的方式有兩種:一種是在定義方法時新增內聯保留字的字首;另一種是在類的頭部宣告中定義方法。 雖然內聯方法的呼叫方式和普通方法相同,但其編譯過程卻相差甚遠。由於內聯方法的程式碼必須內聯展開,這就要求呼叫內聯方

前端的一些效能測試程式碼

1 整個頁面載入過程時間 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title&

程式碼效能測試

對程式碼進行測試是專案在釋出前必不可少的環節,需要保證產品的可用性、易用性、健壯性和安全性。 這也是產品測試要達成的目標。軟體測試一個大的方向,專業性很強。這裡,我們只介紹一些基本測試方法。 1. 時間點測試 效能測試的主要目的是測試程式碼的執行效率,找到瓶頸進行優

.NET單元測試的藝術-3.測試程式碼

開篇:上一篇我們學習單元測試和核心技術:存根、模擬物件和隔離框架,它們是我們進行高質量單元測試的技術基礎。本篇會集中在管理和組織單元測試的技術,以及如何確保在真實專案中進行高質量的單元測試。 系列目錄: 1.入門 2.核心技術 3.測試程式碼 一、測試層次和組織 1.1 測試專案的兩種目錄

.NET 效能測試工具 -- 效能計數器

內容預告: Windows內建工具(效能計數器)事件跟蹤器時間分析記憶體分配分析記憶體使用量分析其他分析效能計數器:直接win+R執行 perfmon.exe 即可開啟。可以在以下場景下使用: 如果發現有記憶體洩露,效能計數器可以被用來檢查託管還是本地記憶體分配的問題。Pr

C#測試程式碼效能耗時

一:             DateTime BeginTime = System.DateTime.Now;             //程式碼             DateTime EndTime = System.DateTime.Now;          

cpu效能測試程式碼

原文:http://tieba.baidu.com/p/3203920933 #include<time.h> #include<stdio.h> #include<math.h> #include <sys/time.h>

JMH-大廠是如何使用JMH進行Java程式碼效能測試的?必須掌握!

## Java 效能測試難題 現在的 JVM 已經越來越為智慧,它可以在編譯階段、載入階段、執行階段對程式碼進行優化。比如你寫了一段不怎麼聰明的程式碼,到了 JVM 這裡,它發現幾處可以優化的地方,就順手幫你優化了一把。這對程式的執行固然美妙,卻讓開發者不能準確瞭解程式的執行情況。在需要進行效能測試時,如果