当然不要忘记,官网才是最好的老师:docs.microsoft.com/zh-cn/dotnet/core/
沙盒学习指南: 免费环境docs.microsoft.com/zh-cn/learn/browse
posted @ 2020 初久的私房菜 推荐出品

.Net用BenchmarkDotNet提升.NET应用性能

 

正文

在.NET开发中,性能优化是至关重要的环节。BenchmarkDotNet作为一款强大的开源基准测试库,能够帮助开发者准确测量代码的性能表现,从而有针对性地进行优化。本文将详细介绍BenchmarkDotNet的使用方法,助力.Net开发者提升应用性能。

BenchmarkDotNet简介

BenchmarkDotNet是专为.Net应用程序设计的开源基准测试库。它通过多次运行被测试的方法,收集统计数据,生成详细的报告,涵盖执行时间、内存使用等多方面信息。该库简单易用,可轻松集成到现有项目中,为开发者提供了全面的性能评估工具。

入门指南

要开始使用BenchmarkDotNet,首先需要安装其NuGet包。可以通过以下命令完成安装:

Install-Package BenchmarkDotNet

安装完成后,只需进行基本设置即可对代码进行基准测试。以下是一个简单的示例:

public class StringBenchmarks
{
    private const int Count = 1000;

    [Benchmark]
    public string StringConcatenation()
    {
        string result = string.Empty;
        for (int i = 0; i < Count; i++)
            result += "Hello World!";
        return result;
    }

    [Benchmark]
    public string StringBuilder()
    {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < Count; i++)
            sb.Append("Hello World!");
        return sb.ToString();
    }
}

在上述示例中,创建了一个公共类,并在其中定义了两个公共方法,分别使用经典字符串拼接和StringBuilder类型来实现相同的功能。通过为方法添加Benchmark属性,即可将其标记为基准测试方法。
运行基准测试时,需要确保应用程序处于发布模式。建议关闭IDE(以及其他应用程序),通过命令行界面(CLI)运行应用。在控制台中,你将看到如下结果:
默认情况下,结果会显示四列:方法(Method)、平均值(Mean)、误差(Error)和标准差(StdDev)。

  • 方法:列出了基准测试方法的名称。
  • 平均值:显示了基准测试方法在所有迭代中的平均执行时间。
  • 误差:表示平均值结果的误差范围,反映了平均值的准确性。
  • 标准差:展示了不同运行之间的执行时间变化程度。

基线设置

你可以将某个方法标记为基线:

[Benchmark(Baseline = true)]
public string StringBuilder()

这将在汇总结果中添加一个比率(Ratio)列。比率列显示了基准测试方法相对于基线方法的性能表现。在示例中,StringBuilder方法的性能比字符串拼接方法快近150倍。此外,还会显示比率标准差(RatioSD)列,用于表示比率在不同运行中的变化程度。

隐藏列

如果希望从汇总结果中隐藏某些列,可以使用HideColumns属性:

[HideColumns("Error", "StdDev", "RatioSD")]
public class StringBenchmarks

内存诊断

BenchmarkDotNet还可以分析内存使用情况。只需在类上添加MemoryDiagnoser属性:

Copy
[MemoryDiagnoser]
public class StringBenchmarks

运行测试后,结果将包含内存使用相关的数据。

参数化

BenchmarkDotNet的Params属性允许为基准测试方法指定多个输入值。这使得你可以使用不同的参数值运行相同的基准测试,方便观察不同输入对性能的影响。例如,如果你想测试不同数据大小下方法的性能表现,可以这样设置:

Copy
[Params(100, 1_000, 10_000)]
public int Count { get; set; }

运行测试后,结果将展示不同Count值下的性能数据。

多.Net版本测试

你可以通过SimpleJob属性和RuntimeMoniker选项,针对多个.Net版本运行基准测试:

Copy
[SimpleJob(RuntimeMoniker.Net70)]
[SimpleJob(RuntimeMoniker.Net80)]
public class StringBenchmarks

需要注意的是,必须安装你想要运行基准测试的所有.Net版本,并在项目设置中进行定义:

Copy
<PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFrameworks>net7.0;net8.0</TargetFrameworks>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
</PropertyGroup>

运行测试后,结果将分别展示不同.Net版本下的性能表现。

总结

本文仅介绍了BenchmarkDotNet的部分常用功能。实际上,BenchmarkDotNet还具备许多其他特性,值得开发者深入探索。基准测试是.Net开发中的一项关键技能,BenchmarkDotNet让设置和收集性能数据变得轻松,为优化工作提供了有力支持。你可以通过GitHub获取相关代码示例,进一步了解和使用BenchmarkDotNet,提升你的.Net应用性能。

posted @   初久的私房菜  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
作者:初久的私房菜
好好学习,天天向上
返回顶部小火箭
好友榜:
如果愿意,把你的博客地址放这里
张弛:https://blog.zhangchi.fun/
点击右上角即可分享
微信分享提示