欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解如何使用BenchmarkDotNet對.NET代碼進(jìn)行性能基準(zhǔn)測試

 更新時間:2024年12月23日 08:37:15   作者:追逐時光者  
BenchmarkDotNet是一個基于.NET開源、功能全面、易于使用的性能基準(zhǔn)測試框架,這篇文章就來和小編一起學(xué)習(xí)一下如何使用BenchmarkDotNet對.NET代碼進(jìn)行性能基準(zhǔn)測試吧

前言

在軟件開發(fā)領(lǐng)域,性能基準(zhǔn)測試是確保軟件系統(tǒng)高效、穩(wěn)定運(yùn)行的重要環(huán)節(jié)。它可以幫助你評估應(yīng)用程序的性能,了解其在不同條件下的響應(yīng)時間、吞吐量、資源利用率等。通過基準(zhǔn)測試,你可以確定系統(tǒng)在處理特定工作負(fù)載時的性能表現(xiàn)。

項(xiàng)目介紹

BenchmarkDotNet是一個基于.NET開源、功能全面、易于使用的性能基準(zhǔn)測試框架,它為.NET開發(fā)者提供了強(qiáng)大的性能評估和優(yōu)化能力。通過自動化測試、多平臺支持、高級統(tǒng)計(jì)分析和自定義配置等特性,BenchmarkDotNet幫助開發(fā)者更好地理解和優(yōu)化軟件系統(tǒng)的性能表現(xiàn)。

項(xiàng)目特性

  • 支持的語言:C#、F#、Visual Basic。
  • 支持的操作系統(tǒng):Windows、Linux、macOS。
  • 支持的架構(gòu):x86、x64、ARM、ARM64、Wasm 和 LoongArch64。
  • 支持的運(yùn)行時:.NET 5+、.NET Framework 4.6.1+、.NET Core 3.1+、Mono、NativeAOT。

創(chuàng)建控制臺應(yīng)用

創(chuàng)建名為:BenchmarkDotNetExercise的.NET 9控制臺應(yīng)用。

安裝 NuGet 包

在NuGet包管理器中搜索:BenchmarkDotNet 包進(jìn)行安裝:

進(jìn)行性能基準(zhǔn)測試

接下來我們對.NET中常見的三種加密哈希函數(shù):MD5、SHA256、SHA1進(jìn)行性能基準(zhǔn)測試,來一起分析一下哪一種哈希算法性能更優(yōu)、效率更快。

HashFunctionsBenchmark

    [MemoryDiagnoser]//記錄內(nèi)存分配情況
    public class HashFunctionsBenchmark
    {
        private readonly string _inputData;

        public HashFunctionsBenchmark()
        {
            // 使用一個較長的字符串作為輸入,以更好地反映哈希函數(shù)的性能
            _inputData = new string('y', 1000000);
        }

        [Benchmark]
        public byte[] MD5Hash()
        {
            using (MD5 md5 = MD5.Create())
            {
                return md5.ComputeHash(Encoding.UTF8.GetBytes(_inputData));
            }
        }

        [Benchmark]
        public byte[] SHA256Hash()
        {
            using (SHA256 sha256 = SHA256.Create())
            {
                return sha256.ComputeHash(Encoding.UTF8.GetBytes(_inputData));
            }
        }

        [Benchmark]
        public byte[] SHA1Hash()
        {
            using (SHA1 sha1 = SHA1.Create())
            {
                return sha1.ComputeHash(Encoding.UTF8.GetBytes(_inputData));
            }
        }
    }

運(yùn)行基準(zhǔn)測試

    internal class Program
    {
        static void Main(string[] args)
        {
            var summary = BenchmarkRunner.Run<HashFunctionsBenchmark>();
        }
    }

注意一定要設(shè)置為:Release模式運(yùn)行,假如為Debug模式會提示下面異常:

// Validating benchmarks:
//    * Assembly BenchmarkDotNetExercise which defines benchmarks is non-optimized
Benchmark was built without optimization enabled (most probably a DEBUG configuration). Please, build it in RELEASE.
If you want to debug the benchmarks, please see https://benchmarkdotnet.org/articles/guides/troubleshooting.html#debugging-benchmarks.

分析生成的報(bào)告

說明

  • Mean: 所有測量值的算術(shù)平均值。
  • Error: 99.9% 置信區(qū)間的一半。
  • StdDev: 所有測量值的標(biāo)準(zhǔn)差。
  • Gen0: 第 0 代 GC 每 1000 次操作收集一次。
  • Gen1: 第 1 代 GC 每 1000 次操作收集一次。
  • Gen2: 第 2 代 GC 每 1000 次操作收集一次。
  • Allocated: 每次操作分配的內(nèi)存(僅托管內(nèi)存,包含所有內(nèi)容,1KB = 1024B)。
  • 1 ms: 1 毫秒(0.001 秒)。

報(bào)告分析

MethodMeanErrorStdDevGen0Gen1Gen2Allocated
MD5Hash1.952 ms0.0169 ms0.0158 ms197.2656197.2656197.2656976.9 KB
SHA256Hash3.907 ms0.0157 ms0.0147 ms195.3125195.3125195.3125976.93 KB
SHA1Hash1.780 ms0.0231 ms0.0193 ms197.2656197.2656197.2656976.92 KB

MD5Hash 的平均耗時稍長于 SHA1Hash,但誤差和標(biāo)準(zhǔn)差較小,性能穩(wěn)定性較好,垃圾回收次數(shù)與 SHA1Hash 相同。

SHA256Hash 的平均耗時最長,但誤差和標(biāo)準(zhǔn)差最小,性能穩(wěn)定性最好,垃圾回收次數(shù)略少于 MD5Hash 和 SHA1Hash。

SHA1Hash 的平均耗時最短,但誤差和標(biāo)準(zhǔn)差較大,表示其性能雖然優(yōu)越但不太穩(wěn)定。

性能測試多種格式輸出

MarkdownExporter:導(dǎo)出Markdown格式。

AsciiDocExporter:導(dǎo)出AsciiDoc格式。

HtmlExporter:導(dǎo)出HTML格式。

CsvExporter:導(dǎo)出CSV(逗號分隔值)格式。

RPlotExporter:導(dǎo)出R繪圖文件格式。

[MarkdownExporter, AsciiDocExporter, HtmlExporter, CsvExporter, RPlotExporter]
public class HashFunctionsBenchmark
{
}

到此這篇關(guān)于詳解如何使用BenchmarkDotNet對.NET代碼進(jìn)行性能基準(zhǔn)測試的文章就介紹到這了,更多相關(guān)BenchmarkDotNet .NET代碼性能基準(zhǔn)測試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c#測試本機(jī)sql運(yùn)算速度的代碼示例分享

    c#測試本機(jī)sql運(yùn)算速度的代碼示例分享

    本文代碼目的很簡單,就是使用c#測試一下本機(jī)sql運(yùn)算的速度,使用循環(huán)往數(shù)據(jù)里大量插入數(shù)據(jù),計(jì)算所用時間,大家參考使用吧
    2014-01-01
  • c#基礎(chǔ)系列之ref和out的深入理解

    c#基礎(chǔ)系列之ref和out的深入理解

    有過C#基礎(chǔ)知識的都應(yīng)該清楚Ref和Out的使用方法,所以下面這篇文章主要給大家介紹了關(guān)于c#基礎(chǔ)系列之ref和out的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • 利用C#代碼將html樣式文件與Word文檔互換的方法

    利用C#代碼將html樣式文件與Word文檔互換的方法

    這篇文章主要給大家介紹了關(guān)于利用C#代碼將html樣式文件與Word文檔互換的方法,文中通過示例代碼將兩種轉(zhuǎn)換介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • 淺談C#.NET、JavaScript和JSON

    淺談C#.NET、JavaScript和JSON

    本文介紹了C#.NET、JavaScript和JSON的相關(guān)知識,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • 詳解C#設(shè)置Excel數(shù)據(jù)自適應(yīng)行高、列寬的2種情況

    詳解C#設(shè)置Excel數(shù)據(jù)自適應(yīng)行高、列寬的2種情況

    這篇文章主要介紹了C#設(shè)置Excel數(shù)據(jù)自適應(yīng)行高、列寬的2種情況,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 詳解C# 不能用于文件名的字符

    詳解C# 不能用于文件名的字符

    在 Windows 有一些字符是不能作為文件名,嘗試重命名一個文件,輸入/ 就可以看到windows 提示的不能作為文件名的字符,那么具體是包括哪些符號不能作為文件名呢?下面小編給大家介紹下
    2018-02-02
  • C#將Json解析成DateTable的方法

    C#將Json解析成DateTable的方法

    這篇文章主要介紹了C#將Json解析成DateTable的方法,涉及相關(guān)格式轉(zhuǎn)換的操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • C#?輸出參數(shù)out問題

    C#?輸出參數(shù)out問題

    這篇文章主要介紹了C#?輸出參數(shù)out問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 解決C# 截取當(dāng)前程序窗口指定位置截圖的實(shí)現(xiàn)方法

    解決C# 截取當(dāng)前程序窗口指定位置截圖的實(shí)現(xiàn)方法

    本篇文章是對C#中截取當(dāng)前程序窗口指定位置截圖的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#文件流讀寫和進(jìn)度回調(diào)示例詳解

    C#文件流讀寫和進(jìn)度回調(diào)示例詳解

    這篇文章主要給大家介紹了關(guān)于C#文件流讀寫和進(jìn)度回調(diào)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03

最新評論