最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

項(xiàng)目介紹

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

項(xiàng)目特性

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

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

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

安裝 NuGet 包

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

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

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

HashFunctionsBenchmark

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

        public HashFunctionsBenchmark()
        {
            // 使用一個(gè)較長(zhǎng)的字符串作為輸入,以更好地反映哈希函數(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)測(cè)試

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

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

// 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)告

說(shuō)明

  • Mean: 所有測(cè)量值的算術(shù)平均值。
  • Error: 99.9% 置信區(qū)間的一半。
  • StdDev: 所有測(cè)量值的標(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 的平均耗時(shí)稍長(zhǎng)于 SHA1Hash,但誤差和標(biāo)準(zhǔn)差較小,性能穩(wěn)定性較好,垃圾回收次數(shù)與 SHA1Hash 相同。

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

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

性能測(cè)試多種格式輸出

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

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

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

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

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

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

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

相關(guān)文章

最新評(píng)論

德令哈市| 苗栗县| 双城市| 会泽县| 平原县| 宁波市| 朝阳市| 武冈市| 澎湖县| 治多县| 同德县| 满洲里市| 盐亭县| 油尖旺区| 阜新市| 甘洛县| 中卫市| 唐河县| 垫江县| 甘孜县| 长武县| 宝鸡市| 岗巴县| 延川县| 平潭县| 锦州市| 大同县| 新疆| 普兰店市| 伊宁县| 红河县| 梅州市| 郎溪县| 德清县| 本溪市| 西峡县| 阳泉市| 衡南县| 景宁| 资中县| 张北县|