温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何使用BenchmarkDotNet对C#代码进行基准测试

发布时间:2021-03-22 10:39:22 来源:亿速云 阅读:161 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关如何使用BenchmarkDotNet对C#代码进行基准测试的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

BenchmarkDotNet 是一个轻量级,开源的,强大的 .NET 工具包,它可以将你的方法转化为基准并跟踪这些方法,最后对这些方法的性能提供一些测试报告,使用 BenchmarkDotNet 玩 基准测试 是非常容易的。

你可以利用 BenchmarkDotNet 在 .NET Framework 和 .NET Core 应用程序上实现基准测试,在这篇文章中,我们将会讨论如何在 .NET Core 中实现基准测试。

安装 BenchmarkDotNet

要想使用 BenchmarkDotNet,要么通过 Nuget 可视化窗口安装 BenchmarkDotNet,要么使用NuGet Package Manager Console 命令行窗口输入如下命令。

Install-Package BenchmarkDotNet

什么是基准测试

基准测试 是对应用程序的一段代码的性能提供一个或者一组度量值,度量代码本质上来说就是让你清楚的了解你的应用程序的性能到底是怎么样的,当你想优化代码的时候,如果手边有这些性能度量值那该有多好呀~ 基准测试也可以帮助我们缩小到那些必须要重构的代码。

创建基准测试代码

新建 BenchmarkDotNet 类,类定义如下

    [MemoryDiagnoser]
    public class MemoryBenchmarkerDemo
    {
        int NumberOfItems = 100000;
        [Benchmark]
        public string ConcatStringsUsingStringBuilder()
        {
            var sb = new StringBuilder();
            for (int i = 0; i < NumberOfItems; i++)
            {
                sb.Append("Hello World!" + i);
            }
            return sb.ToString();
        }

        [Benchmark]
        public string ConcatStringsUsingGenericList()
        {
            var list = new List<string>(NumberOfItems);
            for (int i = 0; i < NumberOfItems; i++)
            {
                list.Add("Hello World!" + i);
            }
            return list.ToString();
        }
    }

上面的代码展示了如何做 基准测试, 做法很简单,在方法上标记 Benchmark 特性即可,接下来就可以 Main 方法中启动 基准测试,代码如下:

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

运行 benchmark

值得注意的是,一定要用 release 模式运行,如果用debug的话,会抛如下错误的。

如何使用BenchmarkDotNet对C#代码进行基准测试

调整为 release 模式后,将程序跑起来,要稍微跑一段时间,最后将会看到 console 输出如下的 summary。

如何使用BenchmarkDotNet对C#代码进行基准测试

从图中可以看到,summary中会包含比如:BenchmarkDotNet版本,操作系统,计算机硬件,.NET版本,编译器信息和一些应用程序相关的性能信息,从图中也可以看出 ConcatStringUsingStringBuilder 方法比  ConcatStringUsingGenericList 方法性能更高,付出的代价就是占用更多的内存。

接下来在 MemoryBenchmarkerDemo 类上标注 RankColumn 标记,这样会在输出结构中多一个给程序排名的 Rank 列,修改代码如下:

    [MemoryDiagnoser, RankColumn]
    public class MemoryBenchmarkerDemo
    {
        ...
    }

接下来再将程序跑起来,观察最后的 summary,可以清楚的看到多了一个 Rank 列。

如何使用BenchmarkDotNet对C#代码进行基准测试

感谢各位的阅读!关于“如何使用BenchmarkDotNet对C#代码进行基准测试”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI