BenchmarkDotNet-显示内存
在基准测试中, 除了运行耗时之外, 使用内存也是一项比较重要的指标, 下面介绍一下如何在最终的结果中展示内存方面的使用情况
// 由于现在需要展示内存方面的指标, 原来的字符串判空由于使用内存较少, 不适合用来做测试
// 因此定义了以下拥有相同属性的结构体和类
public struct SModel
{
public int Prop1 { get; set; }
public int Prop2 { get; set; }
public int Prop3 { get; set; }
}
public class CModel
{
public int Prop1 { get; set; }
public int Prop2 { get; set; }
public int Prop3 { get; set; }
}
[SimpleJob(RuntimeMoniker.Net70)]
[SimpleJob(RuntimeMoniker.Net60, baseline: true)]
[MemoryDiagnoser]
public class Test
{
public int Count = 1000;
[Benchmark(Baseline = true)]
public void TestStruct()
{
var data = new List<SModel>();
for (var i = 0; i < Count; i++)
data.Add(new SModel());
}
[Benchmark]
public void TestClass()
{
var data = new List<CModel>();
for (var i = 0; i < Count; i++)
data.Add(new CModel());
}
}
给Test
类打上[MemoryDiagnoser]
特性, 最终生成的表格中就会出现内存方面的数据
Method | Runtime | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Allocated | Alloc Ratio |
---|---|---|---|---|---|---|---|---|---|
TestStruct | .NET 6.0 | 3.284 us | 0.0831 us | 0.0549 us | 1.00 | 0.00 | 11.8054 | 24.2 KB | 1.00 |
TestClass | .NET 6.0 | 7.945 us | 0.2639 us | 0.1380 us | 2.43 | 0.07 | 23.2011 | 47.46 KB | 1.96 |
TestStruct | .NET 7.0 | 3.227 us | 0.0690 us | 0.0457 us | 0.98 | 0.02 | 11.7973 | 24.2 KB | 1.00 |
TestClass | .NET 7.0 | 7.100 us | 0.6302 us | 0.4168 us | 2.16 | 0.11 | 23.2008 | 47.46 KB | 1.96 |