.Net性能测试工具BenchmarkDotNet学习

BenchmarkDotNet 是一个用于性能基准测试的开源框架。它可以让开发人员编写简单易懂的代码,并测量和分析这些代码的性能表现,从而帮助开发人员优化其代码,以达到更高的性能和更好的效率。

源码地址:https://github.com/dotnet/BenchmarkDotNet

NuGet地址:https://www.nuget.org/packages/BenchmarkDotNet

  1. 用起来还比较简单,在对应的method上面打上[Benchmark]标记即可;

  2. 通过var summary = BenchmarkRunner.Run();来启动;

  3. 要求class和method必须是public;

  4. 要求程序必须是Release;

  5. 会自动将程序中打标记的对应模块跑很多遍,最后给出均值和偏差;

项目中添加BenchmarkDotNet

NuGet\Install-Package BenchmarkDotNet -Version 0.13.5
<PackageReference Include="BenchmarkDotNet" Version="0.13.5" />

代码示例

代码来源于最近看的冯辉的 《.NET框架设计与实现》附源码:


using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Running;

//运行基准测试
BenchmarkRunner.Run<PgoBenchmarks>();

[Config(typeof(MyEnvVars))]
public class PgoBenchmarks
{
   // 自定义配置环境 "Default vs DPGO"
   class MyEnvVars : ManualConfig
  {
       public MyEnvVars()
      {
           // 使用默认模式
           AddJob(Job.Default.WithId("Default mode"));
           // 使用DPGO模式模式
           AddJob(Job.Default.WithId("Dynamic PGO")
              .WithEnvironmentVariables(
                   new EnvironmentVariable("DOTNET_TieredPGO", "1"),
                   new EnvironmentVariable("DOTNET_TC_QuickJitForLoops", "1"),
                   new EnvironmentVariable("DOTNET_ReadyToRun", "0")));

      }
  }

  [Benchmark]
  [Arguments(6, 100)]
   public int HotColdBasicBlockReorder(int key, int data)
  {
       if (key == 1)
           return data - 5;
       if (key == 2)
           return data += 4;
       if (key == 3)
           return data >> 3;
       if (key == 4)
           return data * 2;
       if (key == 5)
           return data / 1;
       return data; // 默认key为6,所以会使用返回data
  }
}

运行结果

传送门:https://raokun.top/raokun/archives/net-xing-neng-ce-shi-gong-ju-benchmarkdotnet-xue-xi

.Net性能测试工具BenchmarkDotNet学习的更多相关文章

  1. 性能测试工具BenchmarkDotnet

    .NET Core中的性能测试工具BenchmarkDotnet https://www.cnblogs.com/lwqlun/p/9671611.html 背景介绍 之前一篇博客中,我们讲解.NET ...

  2. .NET Core中的性能测试工具BenchmarkDotnet

    背景介绍 之前一篇博客中,我们讲解.NET Core中的CSV解析库,在文章的最后,作者使用了性能基准测试工具BenchmarkDotNet测试了2个不同CSV解析库的性能,本篇我们来详细介绍一下Be ...

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

    项目中需要用到性能测试,发现.net 平台的这个神器. 觉得很不错,接下来准备做个系列.具体参考官方介绍 做基线对比测试不是那么容易,你很容易就翻车掉坑里,BenchmarkDotNet 会帮你避坑( ...

  4. 【学习笔记】Iperf3网络性能测试工具

    [学习笔记]Iperf3网络性能测试工具 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理.网络存在安全漏洞等原因,都会导致网络带宽利用率不高. ...

  5. 性能测试学习第二天_性能测试工具概述Loadrunner介绍

    性能测试工具概述Loadrunner介绍 http://www.51testing.com/html/42/n-6542.html 其中,T直接影响用户体验时间 性能测试的原理: 记录一个访问过程的通 ...

  6. 性能测试工具 转自https://yq.aliyun.com/articles/35149?spm=5176.100239.blogcont35147.8.rsow6k

    摘要: 继续这个系列的学习,这一节重点介绍目前流行的性能测试工具以及如何选择适合项目的工具.在此之前,我已经对性能测试工具的原理与架构做了分析. http://www.cnblogs.com/fnng ...

  7. 理解 OpenStack + Ceph (8): 基本的 Ceph 性能测试工具和方法

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  8. 开源多线程性能测试工具-sysbench

    导读 sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试.数据库目前支持MySQL/Oracle/PostgreSQL.本文主要演示Mysql测试 ...

  9. 【转】开源性能测试工具 - Apache ab 介绍

    版权声明:本文可以被转载,但是在未经本人许可前,不得用于任何商业用途或其他以盈利为目的的用途.本人保留对本文的一切权利.如需转载,请在转载是保留此版权声明,并保证本文的完整性.也请转贴者理解创作的辛劳 ...

  10. Web网站的性能测试工具

    随着Web 2.0技术的迅速发展,许多公司都开发了一些基于Web的网站服务,通常在设计开发Web应用系统的时候很难模拟出大量用户同时访问系统的实际情况,因此,当Web网站遇到访问高峰时,容易发生服务器 ...

随机推荐

  1. (c语言描述 函数递归汉诺塔)

    汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序 ...

  2. windows系统错误代码

    0  操作成功完成.  1  功能错误.  2  系统找不到指定的文件.  3  系统找不到指定的路径.  4  系统无法打开文件.  5  拒绝访问.  6  句柄无效.  7  存储控制块被损坏. ...

  3. raid随笔

    1.raid 0 准备两个磁盘 [root@localhost ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 40G 0 disk ...

  4. Kubernetes(k8s)pod详解

    一.简介 在Kubernetes集群中,Pod是所有业务类型的基础,也是K8S管理的最小单位级,它是一个或多个容器的组合.这些容器共享存储.网络和命名空间,以及如何运行的规范.在Pod中,所有容器都被 ...

  5. .net core中使用HttpClient碰到的问题:This instance has already started one or more requests. Properties can only be modified before sending the first request

    项目里使用httpclient一般加staic或者单例来防止每次请求都会新建立一个连接,从而占用太多的服务器资源, 问题产生 但是今天新加的一个方法中每次需要请求不同的url,这时候就出现了错误: 就 ...

  6. Web For Pentester靶场搭建 - XSS

    Web For Pentester是集成了一些简单的Web常见漏洞的靶场,其中有常见的XSS 文件上传 SQL注入 文件包含等常见漏洞,类似于DVWA Web For Pentester搭建 Web ...

  7. MATLAB信号处理常用函数(转载)

    https://shimo.im/docs/YyRXY8cQdqY8RJvc/ <MATLAB信号处理工具箱>,可复制链接后用石墨文档 App 或小程序打开 嗯这个肯定是随便看看,有个印象 ...

  8. 使用K8S进行蓝绿部署的简明实操指南

    在之前的应用部署系列文章里,我们已经介绍过什么是蓝绿部署.如需回顾,点击下方文章链接即可重温.本文我们将会介绍如何使用 Kubernetes 实现蓝绿部署. 应用部署初探:3个主要阶段.4种常见模式 ...

  9. java异常--处理机制

    java异常处理机制 异常处理的关键字:try catch finally throw throws package charpter6.Demo02; public class Test { pub ...

  10. 利用复杂数据类型(eg:对象)时,是直接调用属性快,还是先用变量填装使用快

    为了验证,我用时间戳去尝试 <!DOCTYPE html> <html lang="zh-CN"> <head>     <meta ch ...