Open EgorBot opened 2 months ago
Ampere
BenchmarkDotNet v0.14.0, Ubuntu 22.04.4 LTS (Jammy Jellyfish)
Ampere
Job-AOJGNR : .NET 6.0.33 (6.0.3324.36610), Arm64 RyuJIT AdvSIMD
Job-BHTBPA : .NET 7.0.20 (7.0.2024.26716), Arm64 RyuJIT AdvSIMD
Job-CCEICE : .NET 8.0.8 (8.0.824.36612), Arm64 RyuJIT AdvSIMD
Job-EMWDZB : .NET 9.0.0 (9.0.24.40507), Arm64 RyuJIT AdvSIMD
Method | Runtime | Mean | Error | Ratio | Code Size | Gen0 | Allocated | Alloc Ratio |
---|---|---|---|---|---|---|---|---|
Struct | .NET 6.0 | 2.2353 ns | 0.0001 ns | 1.00 | 40 B | - | - | NA |
Struct | .NET 7.0 | 2.0153 ns | 0.0003 ns | 0.90 | 56 B | - | - | NA |
Struct | .NET 8.0 | 1.4509 ns | 0.0003 ns | 0.65 | 56 B | - | - | NA |
Struct | .NET 9.0 | 1.3027 ns | 0.0003 ns | 0.58 | 36 B | - | - | NA |
Class | .NET 6.0 | 6.8528 ns | 0.0691 ns | 1.00 | 132 B | - | - | NA |
Class | .NET 7.0 | 4.6914 ns | 0.0018 ns | 0.68 | 152 B | - | - | NA |
Class | .NET 8.0 | 5.2436 ns | 0.0006 ns | 0.77 | 192 B | - | - | NA |
Class | .NET 9.0 | 2.4029 ns | 0.0008 ns | 0.35 | 48 B | - | - | NA |
Nullable | .NET 6.0 | 92.8404 ns | 0.2149 ns | 1.00 | 120 B | 0.0014 | 24 B | 1.00 |
Nullable | .NET 7.0 | 84.8922 ns | 0.1184 ns | 0.91 | 152 B | 0.0014 | 24 B | 1.00 |
Nullable | .NET 8.0 | 81.9274 ns | 0.0945 ns | 0.88 | 184 B | 0.0014 | 24 B | 1.00 |
Nullable | .NET 9.0 | 70.1827 ns | 0.0487 ns | 0.76 | 36 B | 0.0014 | 24 B | 1.00 |
NullableSpecialized | .NET 6.0 | 2.1223 ns | 0.0012 ns | 1.00 | 76 B | - | - | NA |
NullableSpecialized | .NET 7.0 | 2.1239 ns | 0.0006 ns | 1.00 | 84 B | - | - | NA |
NullableSpecialized | .NET 8.0 | 0.9391 ns | 0.0003 ns | 0.44 | 80 B | - | - | NA |
NullableSpecialized | .NET 9.0 | 1.1526 ns | 0.0008 ns | 0.54 | 60 B | - | - | NA |
Processing https://github.com/dotnet/runtime/issues/50915#issuecomment-2326368710 command:
Command
-intel -arm64 --runtimes net6.0 net7.0 net8.0 net9.0 ```cs using BenchmarkDotNet.Attributes; [MemoryDiagnoser] [DisassemblyDiagnoser] public class Bench { private S _s = default(S); private C _c = new C(); private S? _ns = (S?)default(S); [Benchmark] public int Struct() => CallM(_s); [Benchmark] public int Class() => CallM(_c); [Benchmark] public int Nullable() => CallM(_ns); [Benchmark] public int NullableSpecialized() => CallMSpecial(_ns); static int CallM(EgorBot will reply in this issue)