首页 > Web开发 > 详细

.NET平台性能测试工具BenchmarkDotnet 简介[译文]

时间:2020-01-12 19:11:30      阅读:88      评论:0      收藏:0      [点我收藏+]

项目中需要用到性能测试,发现.net 平台的这个神器. 具体参考官方介绍

做基线对比测试不是那么容易,你很容易就翻车掉坑里,BenchmarkDotNet 会帮你避坑(即使你是老司机),它会帮你干很多体力活,比如它会针对每个benchmark方法生成独立的工程项目,并启动这些单独的工程,迭代多次运行benchmark方法(包括测试前的热身)等。通常,你不需要关注这些benchmark方法的迭代次数,BenchmarkDotNet 会根据它的经验选中合适的迭代次数。

有了BenchmarkDotNet,做性能对比测试就非常容易了,只需要把你的测试方法加上特性[Benchmark], 想做不同.net平台的性能测试,比如传统的 .NET Framework, .NET Core, and Mono,这些都没问题,加一个特性就会把面向不同平台的测试工程生成出来,随后运行后将会生成不同平台的性能对比结果。可以这么说,它可以测试对比任何不同的测试环境,比如 不同的处理器架构(x86/x64)、不同的JIT编译器(LegacyJIT/RyuJIT)、不同的垃圾回收机制(如服务器/工作站),除此之外,同时还可以引入不同的输入参数(一个或者几个),对比其它条件相同而参数不同时候的性能对比。

BenchmarkDotNet 不仅仅是帮你运行benchmark方法,还帮你分析生成的结果:它会生成不同形式的报表,它的结果报表都是统计分析出来的,它不会一下子给你很多眼花缭乱的数据,但是会给你很关键的性能对比数据。当然,如果你在某些条件下对其它的统计数据感兴趣,你可以手动的通过添加Attribute的方式来定制结果报表。

说了这么多,上个例子:

using System;
using System.Security.Cryptography;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;

namespace MyBenchmarks
{
    [ClrJob(baseline: true), CoreJob, MonoJob, CoreRtJob]
    [RPlotExporter, RankColumn]
    public class Md5VsSha256
    {
        private SHA256 sha256 = SHA256.Create();
        private MD5 md5 = MD5.Create();
        private byte[] data;

        [Params(1000, 10000)]
        public int N;

        [GlobalSetup]
        public void Setup()
        {
            data = new byte[N];
            new Random(42).NextBytes(data);
        }

        [Benchmark]
        public byte[] Sha256() => sha256.ComputeHash(data);

        [Benchmark]
        public byte[] Md5() => md5.ComputeHash(data);
    }

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

 BenchmarkDotNet 非常容易上手。在在测试结束时,它将生成一简明顾要的汇总表

BenchmarkDotNet=v0.11.0, OS=Windows 10.0.16299.309 (1709/FallCreatorsUpdate/Redstone3)
Intel Xeon CPU E5-1650 v4 3.60GHz, 1 CPU, 12 logical and 6 physical cores
Frequency=3507504 Hz, Resolution=285.1030 ns, Timer=TSC
.NET Core SDK=2.1.300-preview1-008174
  [Host]     : .NET Core 2.1.0-preview1-26216-03 (CoreCLR 4.6.26216.04, CoreFX 4.6.26216.02), 64bit RyuJIT
  Job-HKEEXO : .NET Framework 4.7.1 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.2633.0
  Core       : .NET Core 2.1.0-preview1-26216-03 (CoreCLR 4.6.26216.04, CoreFX 4.6.26216.02), 64bit RyuJIT
  CoreRT     : .NET CoreRT 1.0.26414.01, 64bit AOT
  Mono       : Mono 5.10.0 (Visual Studio), 64bit 

| Method | Runtime |     N |       Mean |     Error |    StdDev | Ratio | Rank |
|------- |-------- |------ |-----------:|----------:|----------:|------:|-----:|
| Sha256 |     Clr |  1000 |   8.009 us | 0.0370 us | 0.0346 us |  1.00 |    3 |
| Sha256 |    Core |  1000 |   4.447 us | 0.0117 us | 0.0110 us |  0.56 |    2 |
| Sha256 |  CoreRT |  1000 |   4.321 us | 0.0139 us | 0.0130 us |  0.54 |    1 |
| Sha256 |    Mono |  1000 |  14.924 us | 0.0574 us | 0.0479 us |  1.86 |    4 |
|        |         |       |            |           |           |       |      |
|    Md5 |     Clr |  1000 |   3.051 us | 0.0604 us | 0.0742 us |  1.00 |    3 |
|    Md5 |    Core |  1000 |   2.004 us | 0.0058 us | 0.0054 us |  0.66 |    2 |
|    Md5 |  CoreRT |  1000 |   1.892 us | 0.0087 us | 0.0077 us |  0.62 |    1 |
|    Md5 |    Mono |  1000 |   3.878 us | 0.0181 us | 0.0170 us |  1.27 |    4 |
|        |         |       |            |           |           |       |      |
| Sha256 |     Clr | 10000 |  75.780 us | 1.0445 us | 0.9771 us |  1.00 |    3 |
| Sha256 |    Core | 10000 |  41.134 us | 0.2185 us | 0.1937 us |  0.54 |    2 |
| Sha256 |  CoreRT | 10000 |  40.895 us | 0.0804 us | 0.0628 us |  0.54 |    1 |
| Sha256 |    Mono | 10000 | 141.377 us | 0.5598 us | 0.5236 us |  1.87 |    4 |
|        |         |       |            |           |           |       |      |
|    Md5 |     Clr | 10000 |  18.575 us | 0.0727 us | 0.0644 us |  1.00 |    3 |
|    Md5 |    Core | 10000 |  17.562 us | 0.0436 us | 0.0408 us |  0.95 |    2 |
|    Md5 |  CoreRT | 10000 |  17.447 us | 0.0293 us | 0.0244 us |  0.94 |    1 |
|    Md5 |    Mono | 10000 |  34.500 us | 0.1553 us | 0.1452 us |  1.86 |    4 |

在生成的图表中,通过不同的视角去展示对比测试的详细信息。可以以不同的格式(CSV、XML、JSON等) 导出数据,甚至生成漂亮的图:

技术分享图片

.NET平台性能测试工具BenchmarkDotnet 简介[译文]

原文:https://www.cnblogs.com/deepinnet/p/12183286.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!