fbie / cs-struct-vs-boxing

???

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Storing value types and reference types in a uniform way

The idea is to avoid boxing and instead use a 16 byte struct for each value.

Unfortunately (?) .NET doesn't allow overlapping value type fields and reference type fields.

Platform:

BenchmarkDotNet v0.13.11, Ubuntu 20.04.6 LTS (Focal Fossa)
Intel Core i7-5600U CPU 2.60GHz (Broadwell), 1 CPU, 4 logical and 2 physical cores
.NET SDK 6.0.414
[Host]     : .NET 6.0.22 (6.0.2223.42425), X64 RyuJIT AVX2
DefaultJob : .NET 6.0.22 (6.0.2223.42425), X64 RyuJIT AVX2
Method PDouble PLong Mean Error StdDev Median Ratio RatioSD Gen0 Allocated Alloc Ratio
Unboxing 10 10 109.3 ms 2.18 ms 5.93 ms 109.0 ms 1.00 0.08 9400.0000 18.78 MB 0.80
Boxing 10 10 109.1 ms 2.18 ms 6.07 ms 106.9 ms 1.00 0.00 11600.0000 23.45 MB 1.00
Unboxing 10 25 104.1 ms 0.18 ms 0.15 ms 104.0 ms 0.97 0.01 7600.0000 15.25 MB 0.65
Boxing 10 25 107.3 ms 0.57 ms 0.53 ms 107.4 ms 1.00 0.00 11600.0000 23.45 MB 1.00
Unboxing 10 50 105.5 ms 0.83 ms 0.77 ms 105.6 ms 0.92 0.01 4600.0000 9.39 MB 0.40
Boxing 10 50 115.2 ms 0.42 ms 0.37 ms 115.2 ms 1.00 0.00 11600.0000 23.45 MB 1.00
Unboxing 25 10 101.5 ms 0.41 ms 0.34 ms 101.6 ms 0.96 0.01 7600.0000 15.25 MB 0.65
Boxing 25 10 105.8 ms 0.97 ms 0.86 ms 105.4 ms 1.00 0.00 11600.0000 23.45 MB 1.00
Unboxing 25 25 103.6 ms 0.36 ms 0.30 ms 103.7 ms 0.73 0.02 5800.0000 11.74 MB 0.50
Boxing 25 25 141.5 ms 2.71 ms 4.53 ms 143.3 ms 1.00 0.00 11750.0000 23.45 MB 1.00
Unboxing 25 50 103.8 ms 0.58 ms 0.51 ms 103.7 ms 0.95 0.01 2800.0000 5.89 MB 0.25
Boxing 25 50 109.7 ms 0.80 ms 0.75 ms 109.4 ms 1.00 0.00 11600.0000 23.45 MB 1.00

About

???


Languages

Language:C# 100.0%