起因
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
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/229808.html
微信掃一掃
支付寶掃一掃