benchmarkdotnet dotnet 基准测试类库试用(一)
使用基准测试对于我们应用的性能优化是比较好的方式,可以快速看出优化的结果同时可以给出报告结果
benchmarkdotnet 是dotnet 版本的一个工具,以下是一个简单的试用
环境准备
我使用的是mac系统
- 安装dotnetcoresdk
这个很简单,选择操作系统安装就可以了 - 创建简单console 项目
mkdir benchmark
cd benchmark
dotnet new console
- 添加benckmarldotnet 类库
dotnet add package BenchmarkDotNet
- 添加简单demo
代码来自官方文档
using System;
using System.Security.Cryptography;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
namespace MyBenchmarks
{
public class Md5VsSha256
{
private const int N = 10000;
private readonly byte[] data;
private readonly SHA256 sha256 = SHA256.Create();
private readonly MD5 md5 = MD5.Create();
public Md5VsSha256()
{
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>();
}
}
}
运行&&查看结果
- 运行
注意对于benchmark 需要的是release 版本的测试
编译类库:
dotnet build -c RELEASE
dotnet bin/RELEASE/netcoreapp2.2/benchmark.dll
或者直接:
dotnet run -c release
- 运行效果
// Validating benchmarks:
// ***** BenchmarkRunner: Start *****
// ***** Found 2 benchmark(s) in total *****
// ***** Building 1 exe(s) in Parallel: Start *****
Unable to find .sln file. Will use current directory /Users/dalong/mylearning/aspnetcore-learning/benchmark to search for project file. If you don't use .sln file on purpose it should not be a problem.
// start dotnet restore /p:UseSharedCompilation=false /p:BuildInParallel=false /m:1 in /Users/dalong/mylearning/aspnetcore-learning/benchmark/bin/RELEASE/netcoreapp2.2/4fdd42ee-69c6-492c-805f-2ee1777729fb
// command took 1.73s and exited with 0
// start dotnet build -c Release --no-restore /p:UseSharedCompilation=false /p:BuildInParallel=false /m:1 in /Users/dalong/mylearning/aspnetcore-learning/benchmark/bin/RELEASE/netcoreapp2.2/4fdd42ee-69c6-492c-805f-2ee1777729fb
// command took 3.21s and exited with 0
// ***** Done, took 00:00:05 (5.11 sec) *****
// Found 2 benchmarks:
// Md5VsSha256.Sha256: DefaultJob
// Md5VsSha256.Md5: DefaultJob
// **************************
// Benchmark: Md5VsSha256.Sha256: DefaultJob
// *** Execute ***
// Launch: 1 / 1
// Execute: dotnet "4fdd42ee-69c6-492c-805f-2ee1777729fb.dll" --benchmarkName "MyBenchmarks.Md5VsSha256.Sha256" --job "Default" --benchmarkId 0 in /Users/dalong/mylearning/aspnetcore-learning/benchmark/bin/RELEASE/netcoreapp2.2/4fdd42ee-69c6-492c-805f-2ee1777729fb/bin/Release/netcoreapp2.2
Failed to set up high priority. Make sure you have the right permissions. Message: Permission denied
// BeforeAnythingElse
// Benchmark Process Environment Information:
// Runtime=.NET Core 2.2.6 (CoreCLR 4.6.27817.03, CoreFX 4.6.27818.02), 64bit RyuJIT
// GC=Concurrent Workstation
// Job: DefaultJob
OverheadJitting 1: 1 op, 598964.00 ns, 598.9640 us/op
WorkloadJitting 1: 1 op, 1470156.00 ns, 1.4702 ms/op
OverheadJitting 2: 16 op, 1153574.00 ns, 72.0984 us/op
WorkloadJitting 2: 16 op, 1908217.00 ns, 119.2636 us/op
WorkloadPilot 1: 16 op, 498621.00 ns, 31.1638 us/op
WorkloadPilot 2: 32 op, 976046.00 ns, 30.5014 us/op
WorkloadPilot 3: 64 op, 1959744.00 ns, 30.6210 us/op
WorkloadPilot 4: 128 op, 4449342.00 ns, 34.7605 us/op
WorkloadPilot 5: 256 op, 7827198.00 ns, 30.5750 us/op
WorkloadPilot 6: 512 op, 15652304.00 ns, 30.5709 us/op
WorkloadPilot 7: 1024 op, 31633970.00 ns, 30.8925 us/op
WorkloadPilot 8: 2048 op, 60219960.00 ns, 29.4043 us/op
WorkloadPilot 9: 4096 op, 122998260.00 ns, 30.0289 us/op
WorkloadPilot 10: 8192 op, 243277420.00 ns, 29.6970 us/op
WorkloadPilot 11: 16384 op, 490180822.00 ns, 29.9183 us/op
WorkloadPilot 12: 32768 op, 1006114105.00 ns, 30.7042 us/op
OverheadWarmup 1: 32768 op, 148275.00 ns, 4.5250 ns/op
- 生成的报告目录
html 报告结果
- 其他运行方式
实际上官方文档已经提供了比较全的运行方法
通过全局工具方式
dotnet tool install -g BenchmarkDotNet.Tool
dotnet benchmark MyAssemblyWithBenchmarks.dll --filter *
网络url
string url = "<E.g. direct link to raw content of a gist>";
var summary = BenchmarkRunner.RunUrl(url);
源码
string benchmarkSource = "public class MyBenchmarkClass { ...";
var summary = BenchmarkRunner.RunSource(benchmarkSource);
BenchmarkSwitcher
static void Main(string[] args) => BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
dotnet run -c Release -- --job short --runtimes clr core --filter *BenchmarkClass1*
说明
dotnet 的工具连是越来越丰富了,而且也越来人性化了,实际上基本上各种语言都是类似的实现类库。
参考资料
https://benchmarkdotnet.org/articles/guides/how-to-run.html
https://github.com/dotnet/BenchmarkDotNet
https://github.com/rongfengliang/aspnetcore-webapi-docker-compose-demo
benchmarkdotnet dotnet 基准测试类库试用(一)的更多相关文章
- Asp.net Core dotnet 发布类库文件 带上注释,发布预发行版,带上所有引用
带上注释 效果图 带上所有引用 效果图 预发行版 效果图 由于微软取消了 project.json 这个json 转而用了csproj 用于保存配置 所以懵逼很大一会 资料来源 project.j ...
- dotnet打包类库
打包类库成Nuget包:dotnet pack --configuration Release --include-source --include-symbols --no-build,注意,需要在 ...
- Micro Benchmark Framework java 基准测试类库
Micro Benchmark Framework 框架主要是method 层面上的 benchmark,精度可以精确到微秒级 比较典型的使用场景还有: 想定量地知道某个函数需要执行多长时间,以及执行 ...
- 【基准测试】BenchmarkDotNet介绍
BenchmarkDotNet 概述 BenchmarkDotNet helps you to transform methods into benchmarks, track their perfo ...
- CI框架的引导流程以及基准测试类
一[CI]框架的引导流程了解一下,并掌握如何新增自己的扩展类库 http://www.cnblogs.com/ohmygirl/p/CIRead-4.html // CI框架源码阅读笔记4 引导文 ...
- 程序开发常用第三方类库一览表(VendorLib)
以下是自己开发过程中用到的第三方类库,记录下来方便查阅 ------------------------------------------------------------------------ ...
- 一起了解 .Net Foundation 项目 No.14
.Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. .NET Core .NE ...
- 一起了解 .Net Foundation 项目 No.19
.Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. Salesforce To ...
- 一系列令人敬畏的.NET核心库,工具,框架和软件
内容 一般 框架,库和工具 API 应用框架 应用模板 身份验证和授权 Blockchain 博特 构建自动化 捆绑和缩小 高速缓存 CMS 代码分析和指标 压缩 编译器,管道工和语言 加密 数据库 ...
随机推荐
- .Net 如何使用Nlog
NLog是一个简单灵活的.NET日志记录类库,NLog的API非常类似于log4net,且配置方式非常简单.通过使用NLog,我们可以在任何一种.NET语言中输出带有上下文的调试信息,根据项目需求配置 ...
- CSP2019-S宝典
目录 CSP2019-S宝典 模板 博客 快读 vim配置 对拍 CSP2019-S注意事项 考前 考时 考后 游记 Day -2(UPDATE:2019-11-14) Day -1(UPDATE:2 ...
- jq 简单实现 table 显示和隐藏
在做table显示和隐藏的时候,需要用到节点的问题.不要用id.循环的时候id都是一样的. 这样一个简单的tr显示和隐藏就实现了.也可以将click 换成别的事件.
- c#创建windows服务(代码方式安装、启动、停止、卸载服务)
转载于:https://www.cnblogs.com/mq0036/p/7875864.html 一.开发环境 操作系统:Windows 10 X64 开发环境:VS2015 编程语言:C# .NE ...
- GIT VI操作汇总
在Git Bash Here中用命令行 pull\push\merge 代码,如果存在冲突或者自动合并时,会自动进入VI界面 1.按下 ESC 键,退出编辑模式,切换到命令模式. 2.输入 :wq , ...
- [Linux] - 服务器/VPS一键检测带宽、CPU、内存、负载、IO读写
一.SuperBench.sh VPS/服务器一键检测带宽.CPU.内存.负载.IO读写等的脚本: wget -qO- https://raw.githubusercontent.com/oooldk ...
- Docker Cheatsheet
一.创建 docker create:创建容器,处于停止状态. centos:latest:centos容器:最新版本(也可以指定具体的版本号).本地有就使用本地镜像,没有则从远程镜像库拉取.创建成功 ...
- axios + vue导出excel文件
(使用到了elementUI框架) <template> <el-button type="primary" size="mini" @cli ...
- 原生JS实现上拉下拉列表
话不多说,代码上来,有些知识点直接就在注释里 HTML <div class="list-down"> <button id="btn"> ...
- GitPython模块
GitPython模块 安装: pip3 install gitpython Gitpython 操作 import os from git.repo import Repo import json ...