起因
BenchmarkDotNet支持将性能测试的结果导出为多种格式,常用的一般为html/csv,其实BenchmarkDotNet支持生成很多种文件格式.
支持的文件格式:
BenchmarkDotNet支持生成很多种文件
BenchmarkDotNet生成图表是依赖R的,BenchmarkDotNet只是生成R的脚本文件,需要R执行脚本生成图表.
测试代码
using System.Runtime.CompilerServices;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Exporters;
using BenchmarkDotNet.Exporters.Csv;
namespace dotnet_perf
{
[RPlotExporter] //生成r脚本文件
[MemoryDiagnoser]
[DisassemblyDiagnoser(printSource: true)]
[Config(typeof(Config))]
public class MethodInlineTest
{
[Params(10000)]
public int Count { get; set; }
public Random Random = new Random();
[Benchmark]
public void AggressiveInlining()
{
for (int i = 0; i < Count; i++)
{
int a = Random.Next(1, 100);
int b = Random.Next(1, 100);
int c = AggressiveInliningTest(a, b);
}
}
[Benchmark]
public void AggressiveOptimization()
{
for (int i = 0; i < Count; i++)
{
int a = Random.Next(1, 100);
int b = Random.Next(1, 100);
int c = AggressiveOptimizationTest(a, b);
}
}
[Benchmark]
public void NoInlining()
{
for (int i = 0; i < Count; i++)
{
int a = Random.Next(1, 100);
int b = Random.Next(1, 100);
int c = NoInliningnTest(a, b);
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public int AggressiveInliningTest(int a, int b) //求数的大小
{
return a > b ? a : b;
}
[MethodImpl(MethodImplOptions.AggressiveOptimization)]
public int AggressiveOptimizationTest(int a, int b) //求数的大小
{
return a > b ? a : b;
}
[MethodImpl(MethodImplOptions.NoInlining)]
public int NoInliningnTest(int a, int b) //求数的大小
{
return a > b ? a : b;
}
private class Config : ManualConfig
{
public Config()
{
AddExporter(CsvMeasurementsExporter.Default); //生成csv文件,r脚本生成图表需要
AddExporter(RPlotExporter.Default); //使用r默认的配置
}
}
}
}
#执行R脚本
Rscript.exe .BuildPlots.R
看BenchmarkDotNet生成的图表
BenchmarkDotNet 生成图1
BenchmarkDotNet 生成图2
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 ZLME@ZLME.COM 举报,一经查实,立刻删除。