Skip to content

Instantly share code, notes, and snippets.

@medigor
Created April 25, 2020 16:56
Show Gist options
  • Save medigor/1fae0c9bb475cf51218b55a806368a76 to your computer and use it in GitHub Desktop.
Save medigor/1fae0c9bb475cf51218b55a806368a76 to your computer and use it in GitHub Desktop.
open BenchmarkDotNet.Attributes
open BenchmarkDotNet.Running
type Rec = {N: int}
[<MemoryDiagnoser>]
type Tests() =
[<Benchmark(Baseline=true)>]
member _.OptionSomeRec() =
seq {
for i = 1 to 1000 do
Some {N = 1}
} |> Seq.toArray
[<Benchmark>]
member _.VoptionSomeRec() =
seq {
for i = 1 to 1000 do
ValueSome {N = 1}
} |> Seq.toArray
[<Benchmark>]
member _.OptionNoneRec() =
seq {
for i = 1 to 1000 do
None
} |> Seq.toArray<Option<Rec>>
[<Benchmark>]
member _.VoptionNoneRec() =
seq {
for i = 1 to 1000 do
ValueNone
} |> Seq.toArray<ValueOption<Rec>>
[<Benchmark>]
member _.OptionSomeInt() =
seq {
for i = 1 to 1000 do
Some 1
} |> Seq.toArray
[<Benchmark>]
member _.VoptionSomeInt() =
seq {
for i = 1 to 1000 do
ValueSome 1
} |> Seq.toArray
[<Benchmark>]
member _.OptionNoneInt() =
seq {
for i = 1 to 1000 do
None
} |> Seq.toArray<Option<Rec>>
[<Benchmark>]
member _.VoptionNoneInt() =
seq {
for i = 1 to 1000 do
ValueNone
} |> Seq.toArray<ValueOption<Rec>>
[<EntryPoint>]
let main argv =
BenchmarkRunner.Run<Tests>() |> ignore
0
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.18363.815 (1909/November2018Update/19H2)
Intel Core i7-4771 CPU 3.50GHz (Haswell), 1 CPU, 8 logical and 4 physical cores
.NET Core SDK=3.1.201
  [Host]     : .NET Core 3.1.3 (CoreCLR 4.700.20.11803, CoreFX 4.700.20.12001), X64 RyuJIT DEBUG
  DefaultJob : .NET Core 3.1.3 (CoreCLR 4.700.20.11803, CoreFX 4.700.20.12001), X64 RyuJIT

Method Mean Error StdDev Median Ratio RatioSD Gen 0 Gen 1 Gen 2 Allocated
OptionSomeRec 32.64 μs 0.395 μs 0.369 μs 32.57 μs 1.00 0.00 17.3340 0.0610 - 71.11 KB
VoptionSomeRec 31.85 μs 0.202 μs 0.179 μs 31.83 μs 0.98 0.02 17.3950 0.0610 - 71.47 KB
OptionNoneRec 20.00 μs 0.224 μs 0.210 μs 20.03 μs 0.61 0.01 5.9204 0.0305 - 24.23 KB
VoptionNoneRec 22.53 μs 0.155 μs 0.130 μs 22.48 μs 0.69 0.01 11.7188 - - 48.03 KB
OptionSomeInt 22.52 μs 0.127 μs 0.125 μs 22.52 μs 0.69 0.01 11.6577 - - 47.67 KB
VoptionSomeInt 18.51 μs 0.368 μs 0.937 μs 17.87 μs 0.59 0.03 5.9204 0.0305 - 24.23 KB
OptionNoneInt 18.04 μs 0.072 μs 0.060 μs 18.02 μs 0.55 0.01 5.9204 0.0305 - 24.23 KB
VoptionNoneInt 25.08 μs 0.499 μs 1.392 μs 26.01 μs 0.77 0.04 11.7188 - - 48.03 KB
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment