让BenchmarkDotNet输出汇编代码
介绍
在使用BenchmarkDotNet做性能测试的时候,是可以输出c#最后在机器上执行的汇编代码的.如果不会使用BenchmarkDotNet,可以先去看看 BenchmarkDotNet你值得拥有 先看看从c#编译到程序执行的全过程.根据图了解一下过程

代码
[MemoryDiagnoser]
[DisassemblyDiagnoser(printAsm: true, printSource: true)] //printAsm 输出汇编代码 printSource 输出源码
public class TestString
{
//构建一组参数
[Params(1024)]
public int Count { get; set; }
//Benchmark特性标签,代表要测试的方法
[Benchmark]
public void TestStringAppend()
{
string str = "";
for (int i = 0; i < Count; i++)
{
str = str + i;
}
}
[Benchmark]
public void TestStringBuilder()
{
StringBuilder stringBuilder = new StringBuilder(Count);
for (int i = 0; i < Count; i++)
{
stringBuilder.Append(i);
}
}
}
执行命令:
dotnet run -c release
遇到如下的错误:
根据错误提示,在项目工程文件中加入图中提示两个属性:
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<DebugType>pdbonly</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
重新执行运行命令.在生成的结果中(测试代码生成汇编代码太长,用其他代码生成的结果代替)
分析生成的汇编代码,才能更好的优化代码.
秋风
2019-10-13