Skip to content

Instantly share code, notes, and snippets.

@GnicoJP
Created September 28, 2022 05:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GnicoJP/a53479b7dbadf739b8ef98df6bfb6371 to your computer and use it in GitHub Desktop.
Save GnicoJP/a53479b7dbadf739b8ef98df6bfb6371 to your computer and use it in GitHub Desktop.
Benchmark of F#'s computation expression using InlineIfLambda
// For more information see https://aka.ms/fsharp-console-apps
open BenchmarkDotNet.Attributes
type OptionCode<'T> = unit -> 'T voption
type NewOptionBuilder () =
member inline __.Run<'T>([<InlineIfLambda>]code : 'T OptionCode) : 'T voption = code ()
member inline __.Bind<'T, 'T2>(x : 'T voption, [<InlineIfLambda>] code : 'T -> 'T2 OptionCode) : 'T2 OptionCode =
(fun () -> match x with
| ValueNone -> ValueNone
| ValueSome v -> (code v) ()) // let!
member inline __.BindReturn<'T, 'T2>(x : 'T voption, [<InlineIfLambda>] f : 'T -> 'T2) : 'T2 OptionCode =
(fun () -> match x with
| ValueNone -> ValueNone
| ValueSome v -> ValueSome (f v)) // let! .. return
member inline __.Return<'T>(x : 'T) : 'T OptionCode =
(fun () -> ValueSome x) // return
member inline __.MergeSources<'T, 'T2>(x1 : 'T voption, x2 : 'T2 voption) : struct('T * 'T2) voption =
if x1.IsSome && x2.IsSome then ValueSome struct(x1.Value, x2.Value) else ValueNone // and!
let newOption = NewOptionBuilder()
type NewOptionBuilder2 () =
member inline __.Bind<'T, 'T2>(x : 'T voption, [<InlineIfLambda>] code : 'T -> 'T2 voption) : 'T2 voption =
match x with
| ValueNone -> ValueNone
| ValueSome v -> code v // let!
member inline __.BindReturn<'T, 'T2>(x : 'T voption, [<InlineIfLambda>] f : 'T -> 'T2) : 'T2 voption =
match x with
| ValueNone -> ValueNone
| ValueSome v -> ValueSome (f v) // let! .. return
member inline __.Return<'T>(x : 'T) : 'T voption = ValueSome x // return
member inline __.MergeSources<'T, 'T2>(x1 : 'T voption, x2 : 'T2 voption) : struct('T * 'T2) voption =
if x1.IsSome && x2.IsSome then ValueSome struct(x1.Value, x2.Value) else ValueNone // and!
let newOption2 = NewOptionBuilder2()
type NewOptionBuilder5 () =
member inline __.Run<'T>([<InlineIfLambda>]code : 'T OptionCode) : 'T voption = code ()
member inline __.Bind<'T, 'T2>(x : 'T voption, [<InlineIfLambda>] code : 'T -> 'T2 OptionCode) : 'T2 OptionCode =
(fun () -> match x with
| ValueNone -> ValueNone
| ValueSome v -> (code v) ()) // let!
member inline __.BindReturn<'T, 'T2>(x : 'T voption, [<InlineIfLambda>] f : 'T -> 'T2) : 'T2 OptionCode =
(fun () -> match x with
| ValueNone -> ValueNone
| ValueSome v -> ValueSome (f v)) // let! .. return
member inline __.Bind2Return<'T1, 'T2, 'T3>(x1 : 'T1 voption, x2 : 'T2 voption, [<InlineIfLambda>] f : struct('T1 * 'T2) -> 'T3) : 'T3 OptionCode =
(fun () -> if x1.IsSome && x2.IsSome then ValueSome (f struct(x1.Value,x2.Value)) else ValueNone) // let! .. return
member inline __.Bind3Return<'T1, 'T2, 'T3, 'T4>(x1 : 'T1 voption, x2 : 'T2 voption, x3 : 'T3 voption, [<InlineIfLambda>] f : struct('T1 * 'T2 * 'T3) -> 'T4) : 'T4 OptionCode =
(fun () -> if x1.IsSome && x2.IsSome && x3.IsSome then ValueSome (f struct(x1.Value,x2.Value,x3.Value)) else ValueNone) // let! .. return
member inline __.Bind4Return<'T1, 'T2, 'T3, 'T4, 'T5>(x1 : 'T1 voption, x2 : 'T2 voption, x3 : 'T3 voption, x4 : 'T4 voption, [<InlineIfLambda>] f : struct('T1 * 'T2 * 'T3 * 'T4) -> 'T5) : 'T5 OptionCode =
(fun () -> if x1.IsSome && x2.IsSome && x3.IsSome && x4.IsSome then ValueSome (f struct(x1.Value,x2.Value,x3.Value,x4.Value)) else ValueNone) // let! .. return
member inline __.Bind5Return<'T1, 'T2, 'T3, 'T4, 'T5, 'T6>(x1 : 'T1 voption, x2 : 'T2 voption, x3 : 'T3 voption, x4 : 'T4 voption, x5 : 'T5 voption, [<InlineIfLambda>] f : struct('T1 * 'T2 * 'T3 * 'T4 * 'T5) -> 'T6) : 'T6 OptionCode =
(fun () -> if x1.IsSome && x2.IsSome && x3.IsSome && x4.IsSome && x5.IsSome then ValueSome (f struct(x1.Value,x2.Value,x3.Value,x4.Value,x5.Value)) else ValueNone) // let! .. return
member inline __.Return<'T>(x : 'T) : 'T OptionCode =
(fun () -> ValueSome x) // return
member inline __.MergeSources<'T, 'T2>(x1 : 'T voption, x2 : 'T2 voption) : struct('T * 'T2) voption =
if x1.IsSome && x2.IsSome then ValueSome struct(x1.Value, x2.Value) else ValueNone // and!
member inline __.MergeSources3<'T, 'T2, 'T3>(x1 : 'T voption, x2 : 'T2 voption, x3 : 'T3 voption) : struct('T * 'T2 * 'T3) voption =
if x1.IsSome && x2.IsSome && x3.IsSome then ValueSome struct(x1.Value, x2.Value, x3.Value) else ValueNone // and!
member inline __.MergeSources4<'T, 'T2, 'T3, 'T4>(x1 : 'T voption, x2 : 'T2 voption, x3 : 'T3 voption, x4 : 'T4 voption) : struct('T * 'T2 * 'T3 * 'T4) voption =
if x1.IsSome && x2.IsSome && x3.IsSome && x4.IsSome then ValueSome struct(x1.Value, x2.Value, x3.Value, x4.Value) else ValueNone // and!
member inline __.MergeSources5<'T, 'T2, 'T3, 'T4, 'T5>(x1 : 'T voption, x2 : 'T2 voption, x3 : 'T3 voption, x4 : 'T4 voption, x5 : 'T5 voption) : struct('T * 'T2 * 'T3 * 'T4 * 'T5) voption =
if x1.IsSome && x2.IsSome && x3.IsSome && x4.IsSome && x5.IsSome then ValueSome struct(x1.Value, x2.Value, x3.Value, x4.Value, x5.Value) else ValueNone // and!
let newOption5 = NewOptionBuilder5()
type OldOptionBuilder () =
member inline __.Bind<'T, 'T2>(x : 'T voption, f : 'T -> 'T2 voption) : 'T2 voption =
ValueOption.bind f x // let!
member inline __.BindReturn<'T, 'T2>(x : 'T voption, f : 'T -> 'T2) : 'T2 voption =
ValueOption.map f x // let! .. return
member inline __.Return<'T>(x : 'T) : 'T voption =
ValueSome x // return
member inline __.MergeSources<'T, 'T2>(x1 : 'T voption, x2 : 'T2 voption) : struct('T * 'T2) voption =
ValueOption.map2 (fun x y -> struct(x, y)) x1 x2 // and!
let oldOption = OldOptionBuilder()
type OldOptionBuilder5 () =
member inline __.Bind<'T, 'T2>(x : 'T voption, [<InlineIfLambda>] f : 'T -> 'T2 voption) : 'T2 voption =
ValueOption.bind f x // let!
member inline __.BindReturn<'T, 'T2>(x : 'T voption, f : 'T -> 'T2) : 'T2 voption =
ValueOption.map f x // let! .. return
member inline __.Bind2Return<'T1, 'T2, 'T3>(x1 : 'T1 voption, x2 : 'T2 voption, f : struct('T1 * 'T2) -> 'T3) : 'T3 voption =
ValueOption.map2 (fun v1 v2 -> f struct(v1, v2)) x1 x2 // let! .. return
member inline __.Bind3Return<'T1, 'T2, 'T3, 'T4>(x1 : 'T1 voption, x2 : 'T2 voption, x3 : 'T3 voption, [<InlineIfLambda>] f : struct('T1 * 'T2 * 'T3) -> 'T4) : 'T4 voption =
ValueOption.map3 (fun x y z -> f struct(x, y, z)) x1 x2 x3 // let! .. return
member inline __.Bind4Return<'T1, 'T2, 'T3, 'T4, 'T5>(x1 : 'T1 voption, x2 : 'T2 voption, x3 : 'T3 voption, x4 : 'T4 voption, [<InlineIfLambda>] f : struct('T1 * 'T2 * 'T3 * 'T4) -> 'T5) : 'T5 voption =
let map4 f x1 x2 x3 x4 =
match struct(x1, x2, x3, x4) with
| struct(ValueSome v1, ValueSome v2, ValueSome v3, ValueSome v4) -> ValueSome (f v1 v2 v3 v4)
| _ -> ValueNone
map4 (fun x y z w -> f struct(x, y, z, w)) x1 x2 x3 x4 // and!
member inline __.Bind5Return<'T1, 'T2, 'T3, 'T4, 'T5, 'T6>(x1 : 'T1 voption, x2 : 'T2 voption, x3 : 'T3 voption, x4 : 'T4 voption, x5 : 'T5 voption, [<InlineIfLambda>] f : struct('T1 * 'T2 * 'T3 * 'T4 * 'T5) -> 'T6) : 'T6 voption =
let map5 f x1 x2 x3 x4 x5 =
match struct(x1, x2, x3, x4, x5) with
| struct(ValueSome v1, ValueSome v2, ValueSome v3, ValueSome v4, ValueSome v5) -> ValueSome (f v1 v2 v3 v4 v5)
| _ -> ValueNone
map5 (fun x y z w v -> f struct(x, y, z, w, v)) x1 x2 x3 x4 x5 // and!
member inline __.Return<'T>(x : 'T) : 'T voption =
ValueSome x // return
member inline __.MergeSources<'T, 'T2>(x1 : 'T voption, x2 : 'T2 voption) : struct('T * 'T2) voption =
ValueOption.map2 (fun x y -> struct(x, y)) x1 x2 // and!
member inline __.MergeSources3<'T, 'T2, 'T3>(x1 : 'T voption, x2 : 'T2 voption, x3 : 'T3 voption) : struct('T * 'T2 * 'T3) voption =
ValueOption.map3 (fun x y z -> struct(x, y, z)) x1 x2 x3 // and!
member inline __.MergeSources4<'T, 'T2, 'T3, 'T4>(x1 : 'T voption, x2 : 'T2 voption, x3 : 'T3 voption, x4 : 'T4 voption) : struct('T * 'T2 * 'T3 * 'T4) voption =
let map4 f x1 x2 x3 x4 =
match struct(x1, x2, x3, x4) with
| struct(ValueSome v1, ValueSome v2, ValueSome v3, ValueSome v4) -> ValueSome (f v1 v2 v3 v4)
| _ -> ValueNone
map4 (fun x y z w -> struct(x, y, z, w)) x1 x2 x3 x4 // and!
member inline __.MergeSources5<'T, 'T2, 'T3, 'T4, 'T5>(x1 : 'T voption, x2 : 'T2 voption, x3 : 'T3 voption, x4 : 'T4 voption, x5 : 'T5 voption) : struct('T * 'T2 * 'T3 * 'T4 * 'T5) voption =
let map5 f x1 x2 x3 x4 x5 =
match struct(x1, x2, x3, x4, x5) with
| struct(ValueSome v1, ValueSome v2, ValueSome v3, ValueSome v4, ValueSome v5) -> ValueSome (f v1 v2 v3 v4 v5)
| _ -> ValueNone
map5 (fun x y z w v -> struct(x, y, z, w, v)) x1 x2 x3 x4 x5 // and!
let oldOption5 = OldOptionBuilder5()
[<MemoryDiagnoser>]
type public benchmarker() =
[<Benchmark>]
member public __.old() =
let mutable res = 0
for i in 1..10000000 do
let a = oldOption {
let! a = if i % 1 = 0 then ValueSome 1 else ValueNone
let! b = if i % 2 = 0 then ValueSome 2 else ValueNone
let! c = if i % 3 = 0 then ValueSome 3 else ValueNone
let! d = if i % 4 = 0 then ValueSome 4 else ValueNone
let! e = if i % 5 = 0 then ValueSome 5 else ValueNone
res <- a + b + c + d + e + res
return a + b + c + d + e
}
a |> ignore
res
[<Benchmark>]
member public __.oldAnd() =
let mutable res = 0
for i in 1..10000000 do
let a = oldOption {
let! a = if i % 1 = 0 then ValueSome 1 else ValueNone
and! b = if i % 2 = 0 then ValueSome 2 else ValueNone
and! c = if i % 3 = 0 then ValueSome 3 else ValueNone
and! d = if i % 4 = 0 then ValueSome 4 else ValueNone
and! e = if i % 5 = 0 then ValueSome 5 else ValueNone
res <- a + b + c + d + e + res
return a + b + c + d + e
}
a |> ignore
res
[<Benchmark>]
member public __.oldAnd5() =
let mutable res = 0
for i in 1..10000000 do
let a = oldOption5 {
let! a = if i % 1 = 0 then ValueSome 1 else ValueNone
and! b = if i % 2 = 0 then ValueSome 2 else ValueNone
and! c = if i % 3 = 0 then ValueSome 3 else ValueNone
and! d = if i % 4 = 0 then ValueSome 4 else ValueNone
and! e = if i % 5 = 0 then ValueSome 5 else ValueNone
res <- a + b + c + d + e + res
return a + b + c + d + e
}
a |> ignore
res
[<Benchmark>]
member public __.efficient() =
let mutable res = 0
for i in 1..10000000 do
let a = newOption {
let! a = if i % 1 = 0 then ValueSome 1 else ValueNone
let! b = if i % 2 = 0 then ValueSome 2 else ValueNone
let! c = if i % 3 = 0 then ValueSome 3 else ValueNone
let! d = if i % 4 = 0 then ValueSome 4 else ValueNone
let! e = if i % 5 = 0 then ValueSome 5 else ValueNone
res <- a + b + c + d + e + res
return a + b + c + d + e
}
a |> ignore
res
[<Benchmark>]
member public __.efficient2() =
let mutable res = 0
for i in 1..10000000 do
let a = newOption2 {
let! a = if i % 1 = 0 then ValueSome 1 else ValueNone
let! b = if i % 2 = 0 then ValueSome 2 else ValueNone
let! c = if i % 3 = 0 then ValueSome 3 else ValueNone
let! d = if i % 4 = 0 then ValueSome 4 else ValueNone
let! e = if i % 5 = 0 then ValueSome 5 else ValueNone
res <- a + b + c + d + e + res
return a + b + c + d + e
}
a |> ignore
res
[<Benchmark>]
member public __.efficientAnd() =
let mutable res = 0
for i in 1..10000000 do
let a = newOption {
let! a = if i % 1 = 0 then ValueSome 1 else ValueNone
and! b = if i % 2 = 0 then ValueSome 2 else ValueNone
and! c = if i % 3 = 0 then ValueSome 3 else ValueNone
and! d = if i % 4 = 0 then ValueSome 4 else ValueNone
and! e = if i % 5 = 0 then ValueSome 5 else ValueNone
res <- a + b + c + d + e + res
return a + b + c + d + e
}
a |> ignore
res
[<Benchmark>]
member public __.efficientAnd5() =
let mutable res = 0
for i in 1..10000000 do
let a = newOption5 {
let! a = if i % 1 = 0 then ValueSome 1 else ValueNone
and! b = if i % 2 = 0 then ValueSome 2 else ValueNone
and! c = if i % 3 = 0 then ValueSome 3 else ValueNone
and! d = if i % 4 = 0 then ValueSome 4 else ValueNone
and! e = if i % 5 = 0 then ValueSome 5 else ValueNone
res <- a + b + c + d + e + res
return a + b + c + d + e
}
a |> ignore
res
let fuga () =
newOption{
let! v1 = ValueSome 8
let! v2 = ValueSome 4
and! v3 = ValueSome 2
return v1 + v2 + v3
}
let fuga2 () =
oldOption{
let! v1 = ValueSome 8
let! v2 = ValueSome 4
and! v3 = ValueSome 2
return v1 + v2 + v3
}
let fuga3 () =
newOption2{
let! v1 = ValueSome 8
let! v2 = ValueSome 4
and! v3 = ValueSome 2
return v1 + v2 + v3
}
[<EntryPoint>]
let main args =
let test = benchmarker()
printfn "%d %d %d %d %d %d %d" (test.old()) (test.oldAnd()) (test.oldAnd5()) (test.efficient()) (test.efficient2()) (test.efficientAnd()) (test.efficientAnd5())
//BenchmarkDotNet.Running.BenchmarkRunner.Run(typeof<benchmarker>.Assembly) |> ignore
let summary = BenchmarkDotNet.Running.BenchmarkRunner.Run<benchmarker>()
0
2499990 2499990 2499990 2499990 2499990 2499990 2499990
// Validating benchmarks:
// ***** BenchmarkRunner: Start *****
// ***** Found 7 benchmark(s) in total *****
// ***** Building 1 exe(s) in Parallel: Start *****
// start dotnet restore /p:UseSharedCompilation=false /p:BuildInParallel=false /m:1 /p:Deterministic=true /p:Optimize=true in C:\Workspace\Projects\DotnetTest\FsTest\bin\Release\net6.0\e40dbc85-4fa0-48f1-b4dc-15032659eca7
// command took 1.44s and exited with 0
// start dotnet build -c Release --no-restore /p:UseSharedCompilation=false /p:BuildInParallel=false /m:1 /p:Deterministic=true /p:Optimize=true in C:\Workspace\Projects\DotnetTest\FsTest\bin\Release\net6.0\e40dbc85-4fa0-48f1-b4dc-15032659eca7
// command took 2.95s and exited with 0
// ***** Done, took 00:00:04 (4.47 sec) *****
// Found 7 benchmarks:
// benchmarker.old: DefaultJob
// benchmarker.oldAnd: DefaultJob
// benchmarker.oldAnd5: DefaultJob
// benchmarker.efficient: DefaultJob
// benchmarker.efficient2: DefaultJob
// benchmarker.efficientAnd: DefaultJob
// benchmarker.efficientAnd5: DefaultJob
// **************************
// Benchmark: benchmarker.old: DefaultJob
// *** Execute ***
// Launch: 1 / 1
// Execute: dotnet "e40dbc85-4fa0-48f1-b4dc-15032659eca7.dll" --benchmarkName "Program+benchmarker.old" --job "Default" --benchmarkId 0 in C:\Workspace\Projects\DotnetTest\FsTest\bin\Release\net6.0\e40dbc85-4fa0-48f1-b4dc-15032659eca7\bin\Release\net6.0
// BeforeAnythingElse
// Benchmark Process Environment Information:
// Runtime=.NET 6.0.9 (6.0.922.41905), X64 RyuJIT
// GC=Concurrent Workstation
// Job: DefaultJob
OverheadJitting 1: 1 op, 240800.00 ns, 240.8000 us/op
WorkloadJitting 1: 1 op, 371361500.00 ns, 371.3615 ms/op
WorkloadWarmup 1: 1 op, 302486200.00 ns, 302.4862 ms/op
WorkloadWarmup 2: 1 op, 309060500.00 ns, 309.0605 ms/op
WorkloadWarmup 3: 1 op, 318735900.00 ns, 318.7359 ms/op
WorkloadWarmup 4: 1 op, 305646000.00 ns, 305.6460 ms/op
WorkloadWarmup 5: 1 op, 317059500.00 ns, 317.0595 ms/op
WorkloadWarmup 6: 1 op, 303265000.00 ns, 303.2650 ms/op
// BeforeActualRun
WorkloadActual 1: 1 op, 301198000.00 ns, 301.1980 ms/op
WorkloadActual 2: 1 op, 326008200.00 ns, 326.0082 ms/op
WorkloadActual 3: 1 op, 305414900.00 ns, 305.4149 ms/op
WorkloadActual 4: 1 op, 304054600.00 ns, 304.0546 ms/op
WorkloadActual 5: 1 op, 337494300.00 ns, 337.4943 ms/op
WorkloadActual 6: 1 op, 308367700.00 ns, 308.3677 ms/op
WorkloadActual 7: 1 op, 318700600.00 ns, 318.7006 ms/op
WorkloadActual 8: 1 op, 303954100.00 ns, 303.9541 ms/op
WorkloadActual 9: 1 op, 312655700.00 ns, 312.6557 ms/op
WorkloadActual 10: 1 op, 306240400.00 ns, 306.2404 ms/op
WorkloadActual 11: 1 op, 301964800.00 ns, 301.9648 ms/op
WorkloadActual 12: 1 op, 330021300.00 ns, 330.0213 ms/op
WorkloadActual 13: 1 op, 302171600.00 ns, 302.1716 ms/op
WorkloadActual 14: 1 op, 301812100.00 ns, 301.8121 ms/op
WorkloadActual 15: 1 op, 313843900.00 ns, 313.8439 ms/op
WorkloadActual 16: 1 op, 301763900.00 ns, 301.7639 ms/op
WorkloadActual 17: 1 op, 319570200.00 ns, 319.5702 ms/op
WorkloadActual 18: 1 op, 365192400.00 ns, 365.1924 ms/op
WorkloadActual 19: 1 op, 326980500.00 ns, 326.9805 ms/op
WorkloadActual 20: 1 op, 306493200.00 ns, 306.4932 ms/op
WorkloadActual 21: 1 op, 333230800.00 ns, 333.2308 ms/op
WorkloadActual 22: 1 op, 319311900.00 ns, 319.3119 ms/op
WorkloadActual 23: 1 op, 307482100.00 ns, 307.4821 ms/op
WorkloadActual 24: 1 op, 312260400.00 ns, 312.2604 ms/op
WorkloadActual 25: 1 op, 311159000.00 ns, 311.1590 ms/op
WorkloadActual 26: 1 op, 303997100.00 ns, 303.9971 ms/op
WorkloadActual 27: 1 op, 300010000.00 ns, 300.0100 ms/op
WorkloadActual 28: 1 op, 326277800.00 ns, 326.2778 ms/op
WorkloadActual 29: 1 op, 304978000.00 ns, 304.9780 ms/op
WorkloadActual 30: 1 op, 305801500.00 ns, 305.8015 ms/op
WorkloadActual 31: 1 op, 320312400.00 ns, 320.3124 ms/op
WorkloadActual 32: 1 op, 303387900.00 ns, 303.3879 ms/op
WorkloadActual 33: 1 op, 320945700.00 ns, 320.9457 ms/op
WorkloadActual 34: 1 op, 312916700.00 ns, 312.9167 ms/op
WorkloadActual 35: 1 op, 304542700.00 ns, 304.5427 ms/op
WorkloadActual 36: 1 op, 305747200.00 ns, 305.7472 ms/op
WorkloadActual 37: 1 op, 311226700.00 ns, 311.2267 ms/op
// AfterActualRun
WorkloadResult 1: 1 op, 301198000.00 ns, 301.1980 ms/op
WorkloadResult 2: 1 op, 326008200.00 ns, 326.0082 ms/op
WorkloadResult 3: 1 op, 305414900.00 ns, 305.4149 ms/op
WorkloadResult 4: 1 op, 304054600.00 ns, 304.0546 ms/op
WorkloadResult 5: 1 op, 337494300.00 ns, 337.4943 ms/op
WorkloadResult 6: 1 op, 308367700.00 ns, 308.3677 ms/op
WorkloadResult 7: 1 op, 318700600.00 ns, 318.7006 ms/op
WorkloadResult 8: 1 op, 303954100.00 ns, 303.9541 ms/op
WorkloadResult 9: 1 op, 312655700.00 ns, 312.6557 ms/op
WorkloadResult 10: 1 op, 306240400.00 ns, 306.2404 ms/op
WorkloadResult 11: 1 op, 301964800.00 ns, 301.9648 ms/op
WorkloadResult 12: 1 op, 330021300.00 ns, 330.0213 ms/op
WorkloadResult 13: 1 op, 302171600.00 ns, 302.1716 ms/op
WorkloadResult 14: 1 op, 301812100.00 ns, 301.8121 ms/op
WorkloadResult 15: 1 op, 313843900.00 ns, 313.8439 ms/op
WorkloadResult 16: 1 op, 301763900.00 ns, 301.7639 ms/op
WorkloadResult 17: 1 op, 319570200.00 ns, 319.5702 ms/op
WorkloadResult 18: 1 op, 326980500.00 ns, 326.9805 ms/op
WorkloadResult 19: 1 op, 306493200.00 ns, 306.4932 ms/op
WorkloadResult 20: 1 op, 333230800.00 ns, 333.2308 ms/op
WorkloadResult 21: 1 op, 319311900.00 ns, 319.3119 ms/op
WorkloadResult 22: 1 op, 307482100.00 ns, 307.4821 ms/op
WorkloadResult 23: 1 op, 312260400.00 ns, 312.2604 ms/op
WorkloadResult 24: 1 op, 311159000.00 ns, 311.1590 ms/op
WorkloadResult 25: 1 op, 303997100.00 ns, 303.9971 ms/op
WorkloadResult 26: 1 op, 300010000.00 ns, 300.0100 ms/op
WorkloadResult 27: 1 op, 326277800.00 ns, 326.2778 ms/op
WorkloadResult 28: 1 op, 304978000.00 ns, 304.9780 ms/op
WorkloadResult 29: 1 op, 305801500.00 ns, 305.8015 ms/op
WorkloadResult 30: 1 op, 320312400.00 ns, 320.3124 ms/op
WorkloadResult 31: 1 op, 303387900.00 ns, 303.3879 ms/op
WorkloadResult 32: 1 op, 320945700.00 ns, 320.9457 ms/op
WorkloadResult 33: 1 op, 312916700.00 ns, 312.9167 ms/op
WorkloadResult 34: 1 op, 304542700.00 ns, 304.5427 ms/op
WorkloadResult 35: 1 op, 305747200.00 ns, 305.7472 ms/op
WorkloadResult 36: 1 op, 311226700.00 ns, 311.2267 ms/op
GC: 112 0 0 940000592 1
Threading: 0 0 1
// AfterAll
// Benchmark Process 3568 has exited with code 0.
Mean = 312.008 ms, StdErr = 1.694 ms (0.54%), N = 36, StdDev = 10.165 ms
Min = 300.010 ms, Q1 = 304.040 ms, Median = 307.925 ms, Q3 = 319.376 ms, Max = 337.494 ms
IQR = 15.336 ms, LowerFence = 281.036 ms, UpperFence = 342.381 ms
ConfidenceInterval = [305.925 ms; 318.092 ms] (CI 99.9%), Margin = 6.084 ms (1.95% of Mean)
Skewness = 0.85, Kurtosis = 2.57, MValue = 2
// **************************
// Benchmark: benchmarker.oldAnd: DefaultJob
// *** Execute ***
// Launch: 1 / 1
// Execute: dotnet "e40dbc85-4fa0-48f1-b4dc-15032659eca7.dll" --benchmarkName "Program+benchmarker.oldAnd" --job "Default" --benchmarkId 1 in C:\Workspace\Projects\DotnetTest\FsTest\bin\Release\net6.0\e40dbc85-4fa0-48f1-b4dc-15032659eca7\bin\Release\net6.0
// BeforeAnythingElse
// Benchmark Process Environment Information:
// Runtime=.NET 6.0.9 (6.0.922.41905), X64 RyuJIT
// GC=Concurrent Workstation
// Job: DefaultJob
OverheadJitting 1: 1 op, 193200.00 ns, 193.2000 us/op
WorkloadJitting 1: 1 op, 435971200.00 ns, 435.9712 ms/op
WorkloadWarmup 1: 1 op, 438684900.00 ns, 438.6849 ms/op
WorkloadWarmup 2: 1 op, 431451400.00 ns, 431.4514 ms/op
WorkloadWarmup 3: 1 op, 448810500.00 ns, 448.8105 ms/op
WorkloadWarmup 4: 1 op, 431620800.00 ns, 431.6208 ms/op
WorkloadWarmup 5: 1 op, 436107300.00 ns, 436.1073 ms/op
WorkloadWarmup 6: 1 op, 431096700.00 ns, 431.0967 ms/op
// BeforeActualRun
WorkloadActual 1: 1 op, 433570200.00 ns, 433.5702 ms/op
WorkloadActual 2: 1 op, 423252900.00 ns, 423.2529 ms/op
WorkloadActual 3: 1 op, 425689000.00 ns, 425.6890 ms/op
WorkloadActual 4: 1 op, 440557800.00 ns, 440.5578 ms/op
WorkloadActual 5: 1 op, 433418500.00 ns, 433.4185 ms/op
WorkloadActual 6: 1 op, 428267200.00 ns, 428.2672 ms/op
WorkloadActual 7: 1 op, 424662400.00 ns, 424.6624 ms/op
WorkloadActual 8: 1 op, 437552900.00 ns, 437.5529 ms/op
WorkloadActual 9: 1 op, 425428300.00 ns, 425.4283 ms/op
WorkloadActual 10: 1 op, 448484000.00 ns, 448.4840 ms/op
WorkloadActual 11: 1 op, 438110100.00 ns, 438.1101 ms/op
WorkloadActual 12: 1 op, 448124300.00 ns, 448.1243 ms/op
WorkloadActual 13: 1 op, 438338800.00 ns, 438.3388 ms/op
WorkloadActual 14: 1 op, 444143700.00 ns, 444.1437 ms/op
WorkloadActual 15: 1 op, 456293100.00 ns, 456.2931 ms/op
WorkloadActual 16: 1 op, 449752800.00 ns, 449.7528 ms/op
WorkloadActual 17: 1 op, 432577200.00 ns, 432.5772 ms/op
WorkloadActual 18: 1 op, 426484100.00 ns, 426.4841 ms/op
WorkloadActual 19: 1 op, 428526300.00 ns, 428.5263 ms/op
WorkloadActual 20: 1 op, 471505600.00 ns, 471.5056 ms/op
WorkloadActual 21: 1 op, 455192900.00 ns, 455.1929 ms/op
WorkloadActual 22: 1 op, 434668700.00 ns, 434.6687 ms/op
WorkloadActual 23: 1 op, 456723900.00 ns, 456.7239 ms/op
WorkloadActual 24: 1 op, 435952000.00 ns, 435.9520 ms/op
WorkloadActual 25: 1 op, 445902700.00 ns, 445.9027 ms/op
WorkloadActual 26: 1 op, 435706300.00 ns, 435.7063 ms/op
WorkloadActual 27: 1 op, 476470200.00 ns, 476.4702 ms/op
WorkloadActual 28: 1 op, 469567400.00 ns, 469.5674 ms/op
WorkloadActual 29: 1 op, 434760300.00 ns, 434.7603 ms/op
WorkloadActual 30: 1 op, 442554000.00 ns, 442.5540 ms/op
// AfterActualRun
WorkloadResult 1: 1 op, 433570200.00 ns, 433.5702 ms/op
WorkloadResult 2: 1 op, 423252900.00 ns, 423.2529 ms/op
WorkloadResult 3: 1 op, 425689000.00 ns, 425.6890 ms/op
WorkloadResult 4: 1 op, 440557800.00 ns, 440.5578 ms/op
WorkloadResult 5: 1 op, 433418500.00 ns, 433.4185 ms/op
WorkloadResult 6: 1 op, 428267200.00 ns, 428.2672 ms/op
WorkloadResult 7: 1 op, 424662400.00 ns, 424.6624 ms/op
WorkloadResult 8: 1 op, 437552900.00 ns, 437.5529 ms/op
WorkloadResult 9: 1 op, 425428300.00 ns, 425.4283 ms/op
WorkloadResult 10: 1 op, 448484000.00 ns, 448.4840 ms/op
WorkloadResult 11: 1 op, 438110100.00 ns, 438.1101 ms/op
WorkloadResult 12: 1 op, 448124300.00 ns, 448.1243 ms/op
WorkloadResult 13: 1 op, 438338800.00 ns, 438.3388 ms/op
WorkloadResult 14: 1 op, 444143700.00 ns, 444.1437 ms/op
WorkloadResult 15: 1 op, 456293100.00 ns, 456.2931 ms/op
WorkloadResult 16: 1 op, 449752800.00 ns, 449.7528 ms/op
WorkloadResult 17: 1 op, 432577200.00 ns, 432.5772 ms/op
WorkloadResult 18: 1 op, 426484100.00 ns, 426.4841 ms/op
WorkloadResult 19: 1 op, 428526300.00 ns, 428.5263 ms/op
WorkloadResult 20: 1 op, 471505600.00 ns, 471.5056 ms/op
WorkloadResult 21: 1 op, 455192900.00 ns, 455.1929 ms/op
WorkloadResult 22: 1 op, 434668700.00 ns, 434.6687 ms/op
WorkloadResult 23: 1 op, 456723900.00 ns, 456.7239 ms/op
WorkloadResult 24: 1 op, 435952000.00 ns, 435.9520 ms/op
WorkloadResult 25: 1 op, 445902700.00 ns, 445.9027 ms/op
WorkloadResult 26: 1 op, 435706300.00 ns, 435.7063 ms/op
WorkloadResult 27: 1 op, 469567400.00 ns, 469.5674 ms/op
WorkloadResult 28: 1 op, 434760300.00 ns, 434.7603 ms/op
WorkloadResult 29: 1 op, 442554000.00 ns, 442.5540 ms/op
GC: 28 0 0 240000504 1
Threading: 0 0 1
// AfterAll
// Benchmark Process 29888 has exited with code 0.
Mean = 440.199 ms, StdErr = 2.370 ms (0.54%), N = 29, StdDev = 12.763 ms
Min = 423.253 ms, Q1 = 432.577 ms, Median = 437.553 ms, Q3 = 448.124 ms, Max = 471.506 ms
IQR = 15.547 ms, LowerFence = 409.257 ms, UpperFence = 471.445 ms
ConfidenceInterval = [431.491 ms; 448.906 ms] (CI 99.9%), Margin = 8.707 ms (1.98% of Mean)
Skewness = 0.79, Kurtosis = 2.9, MValue = 2
// **************************
// Benchmark: benchmarker.oldAnd5: DefaultJob
// *** Execute ***
// Launch: 1 / 1
// Execute: dotnet "e40dbc85-4fa0-48f1-b4dc-15032659eca7.dll" --benchmarkName "Program+benchmarker.oldAnd5" --job "Default" --benchmarkId 2 in C:\Workspace\Projects\DotnetTest\FsTest\bin\Release\net6.0\e40dbc85-4fa0-48f1-b4dc-15032659eca7\bin\Release\net6.0
// BeforeAnythingElse
// Benchmark Process Environment Information:
// Runtime=.NET 6.0.9 (6.0.922.41905), X64 RyuJIT
// GC=Concurrent Workstation
// Job: DefaultJob
OverheadJitting 1: 1 op, 199000.00 ns, 199.0000 us/op
WorkloadJitting 1: 1 op, 101021800.00 ns, 101.0218 ms/op
WorkloadPilot 1: 2 op, 195362100.00 ns, 97.6810 ms/op
WorkloadPilot 2: 3 op, 292026900.00 ns, 97.3423 ms/op
WorkloadPilot 3: 4 op, 379325800.00 ns, 94.8315 ms/op
WorkloadPilot 4: 5 op, 484387900.00 ns, 96.8776 ms/op
WorkloadPilot 5: 6 op, 572215300.00 ns, 95.3692 ms/op
WorkloadWarmup 1: 6 op, 591180300.00 ns, 98.5301 ms/op
WorkloadWarmup 2: 6 op, 600920100.00 ns, 100.1534 ms/op
WorkloadWarmup 3: 6 op, 599701100.00 ns, 99.9502 ms/op
WorkloadWarmup 4: 6 op, 587956400.00 ns, 97.9927 ms/op
WorkloadWarmup 5: 6 op, 599700600.00 ns, 99.9501 ms/op
WorkloadWarmup 6: 6 op, 651902900.00 ns, 108.6505 ms/op
WorkloadWarmup 7: 6 op, 623939100.00 ns, 103.9899 ms/op
// BeforeActualRun
WorkloadActual 1: 6 op, 588177900.00 ns, 98.0297 ms/op
WorkloadActual 2: 6 op, 596057400.00 ns, 99.3429 ms/op
WorkloadActual 3: 6 op, 600554100.00 ns, 100.0923 ms/op
WorkloadActual 4: 6 op, 615620600.00 ns, 102.6034 ms/op
WorkloadActual 5: 6 op, 587187100.00 ns, 97.8645 ms/op
WorkloadActual 6: 6 op, 597545200.00 ns, 99.5909 ms/op
WorkloadActual 7: 6 op, 584804200.00 ns, 97.4674 ms/op
WorkloadActual 8: 6 op, 601144800.00 ns, 100.1908 ms/op
WorkloadActual 9: 6 op, 615729300.00 ns, 102.6215 ms/op
WorkloadActual 10: 6 op, 600686500.00 ns, 100.1144 ms/op
WorkloadActual 11: 6 op, 611725400.00 ns, 101.9542 ms/op
WorkloadActual 12: 6 op, 629314100.00 ns, 104.8857 ms/op
WorkloadActual 13: 6 op, 589294500.00 ns, 98.2157 ms/op
WorkloadActual 14: 6 op, 597437200.00 ns, 99.5729 ms/op
WorkloadActual 15: 6 op, 583125400.00 ns, 97.1876 ms/op
WorkloadActual 16: 6 op, 595428800.00 ns, 99.2381 ms/op
WorkloadActual 17: 6 op, 600673700.00 ns, 100.1123 ms/op
// AfterActualRun
WorkloadResult 1: 6 op, 588177900.00 ns, 98.0297 ms/op
WorkloadResult 2: 6 op, 596057400.00 ns, 99.3429 ms/op
WorkloadResult 3: 6 op, 600554100.00 ns, 100.0923 ms/op
WorkloadResult 4: 6 op, 615620600.00 ns, 102.6034 ms/op
WorkloadResult 5: 6 op, 587187100.00 ns, 97.8645 ms/op
WorkloadResult 6: 6 op, 597545200.00 ns, 99.5909 ms/op
WorkloadResult 7: 6 op, 584804200.00 ns, 97.4674 ms/op
WorkloadResult 8: 6 op, 601144800.00 ns, 100.1908 ms/op
WorkloadResult 9: 6 op, 615729300.00 ns, 102.6215 ms/op
WorkloadResult 10: 6 op, 600686500.00 ns, 100.1144 ms/op
WorkloadResult 11: 6 op, 611725400.00 ns, 101.9542 ms/op
WorkloadResult 12: 6 op, 589294500.00 ns, 98.2157 ms/op
WorkloadResult 13: 6 op, 597437200.00 ns, 99.5729 ms/op
WorkloadResult 14: 6 op, 583125400.00 ns, 97.1876 ms/op
WorkloadResult 15: 6 op, 595428800.00 ns, 99.2381 ms/op
WorkloadResult 16: 6 op, 600673700.00 ns, 100.1123 ms/op
GC: 0 0 0 664 6
Threading: 0 0 6
// AfterAll
// Benchmark Process 18108 has exited with code 0.
Mean = 99.637 ms, StdErr = 0.422 ms (0.42%), N = 16, StdDev = 1.688 ms
Min = 97.188 ms, Q1 = 98.169 ms, Median = 99.582 ms, Q3 = 100.134 ms, Max = 102.622 ms
IQR = 1.964 ms, LowerFence = 95.223 ms, UpperFence = 103.080 ms
ConfidenceInterval = [97.919 ms; 101.356 ms] (CI 99.9%), Margin = 1.719 ms (1.73% of Mean)
Skewness = 0.36, Kurtosis = 2.04, MValue = 2
// **************************
// Benchmark: benchmarker.efficient: DefaultJob
// *** Execute ***
// Launch: 1 / 1
// Execute: dotnet "e40dbc85-4fa0-48f1-b4dc-15032659eca7.dll" --benchmarkName "Program+benchmarker.efficient" --job "Default" --benchmarkId 3 in C:\Workspace\Projects\DotnetTest\FsTest\bin\Release\net6.0\e40dbc85-4fa0-48f1-b4dc-15032659eca7\bin\Release\net6.0
// BeforeAnythingElse
// Benchmark Process Environment Information:
// Runtime=.NET 6.0.9 (6.0.922.41905), X64 RyuJIT
// GC=Concurrent Workstation
// Job: DefaultJob
OverheadJitting 1: 1 op, 253600.00 ns, 253.6000 us/op
WorkloadJitting 1: 1 op, 18624900.00 ns, 18.6249 ms/op
OverheadJitting 2: 16 op, 363400.00 ns, 22.7125 us/op
WorkloadJitting 2: 16 op, 271088500.00 ns, 16.9430 ms/op
WorkloadPilot 1: 16 op, 239761700.00 ns, 14.9851 ms/op
WorkloadPilot 2: 32 op, 491009900.00 ns, 15.3441 ms/op
WorkloadPilot 3: 64 op, 983399800.00 ns, 15.3656 ms/op
OverheadWarmup 1: 64 op, 1600.00 ns, 25.0000 ns/op
OverheadWarmup 2: 64 op, 400.00 ns, 6.2500 ns/op
OverheadWarmup 3: 64 op, 500.00 ns, 7.8125 ns/op
OverheadWarmup 4: 64 op, 500.00 ns, 7.8125 ns/op
OverheadWarmup 5: 64 op, 400.00 ns, 6.2500 ns/op
OverheadWarmup 6: 64 op, 400.00 ns, 6.2500 ns/op
OverheadActual 1: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 2: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 3: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 4: 64 op, 400.00 ns, 6.2500 ns/op
OverheadActual 5: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 6: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 7: 64 op, 900.00 ns, 14.0625 ns/op
OverheadActual 8: 64 op, 400.00 ns, 6.2500 ns/op
OverheadActual 9: 64 op, 600.00 ns, 9.3750 ns/op
OverheadActual 10: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 11: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 12: 64 op, 800.00 ns, 12.5000 ns/op
OverheadActual 13: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 14: 64 op, 400.00 ns, 6.2500 ns/op
OverheadActual 15: 64 op, 600.00 ns, 9.3750 ns/op
OverheadActual 16: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 17: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 18: 64 op, 600.00 ns, 9.3750 ns/op
OverheadActual 19: 64 op, 700.00 ns, 10.9375 ns/op
OverheadActual 20: 64 op, 800.00 ns, 12.5000 ns/op
WorkloadWarmup 1: 64 op, 987569000.00 ns, 15.4308 ms/op
WorkloadWarmup 2: 64 op, 982602100.00 ns, 15.3532 ms/op
WorkloadWarmup 3: 64 op, 998872900.00 ns, 15.6074 ms/op
WorkloadWarmup 4: 64 op, 1063588800.00 ns, 16.6186 ms/op
WorkloadWarmup 5: 64 op, 1152566700.00 ns, 18.0089 ms/op
WorkloadWarmup 6: 64 op, 1024687800.00 ns, 16.0107 ms/op
WorkloadWarmup 7: 64 op, 1015369700.00 ns, 15.8652 ms/op
WorkloadWarmup 8: 64 op, 994930300.00 ns, 15.5458 ms/op
WorkloadWarmup 9: 64 op, 1002879300.00 ns, 15.6700 ms/op
WorkloadWarmup 10: 64 op, 1015885600.00 ns, 15.8732 ms/op
WorkloadWarmup 11: 64 op, 1017688200.00 ns, 15.9014 ms/op
WorkloadWarmup 12: 64 op, 1024867800.00 ns, 16.0136 ms/op
WorkloadWarmup 13: 64 op, 1013012400.00 ns, 15.8283 ms/op
// BeforeActualRun
WorkloadActual 1: 64 op, 1014189700.00 ns, 15.8467 ms/op
WorkloadActual 2: 64 op, 1050154400.00 ns, 16.4087 ms/op
WorkloadActual 3: 64 op, 991043300.00 ns, 15.4851 ms/op
WorkloadActual 4: 64 op, 1041555500.00 ns, 16.2743 ms/op
WorkloadActual 5: 64 op, 986194700.00 ns, 15.4093 ms/op
WorkloadActual 6: 64 op, 999916400.00 ns, 15.6237 ms/op
WorkloadActual 7: 64 op, 1016397800.00 ns, 15.8812 ms/op
WorkloadActual 8: 64 op, 985412000.00 ns, 15.3971 ms/op
WorkloadActual 9: 64 op, 1003422600.00 ns, 15.6785 ms/op
WorkloadActual 10: 64 op, 991639600.00 ns, 15.4944 ms/op
WorkloadActual 11: 64 op, 1012609300.00 ns, 15.8220 ms/op
WorkloadActual 12: 64 op, 1012632000.00 ns, 15.8224 ms/op
WorkloadActual 13: 64 op, 1006936300.00 ns, 15.7334 ms/op
WorkloadActual 14: 64 op, 1008642800.00 ns, 15.7600 ms/op
WorkloadActual 15: 64 op, 1004947900.00 ns, 15.7023 ms/op
// AfterActualRun
WorkloadResult 1: 64 op, 1014189200.00 ns, 15.8467 ms/op
WorkloadResult 2: 64 op, 991042800.00 ns, 15.4850 ms/op
WorkloadResult 3: 64 op, 986194200.00 ns, 15.4093 ms/op
WorkloadResult 4: 64 op, 999915900.00 ns, 15.6237 ms/op
WorkloadResult 5: 64 op, 1016397300.00 ns, 15.8812 ms/op
WorkloadResult 6: 64 op, 985411500.00 ns, 15.3971 ms/op
WorkloadResult 7: 64 op, 1003422100.00 ns, 15.6785 ms/op
WorkloadResult 8: 64 op, 991639100.00 ns, 15.4944 ms/op
WorkloadResult 9: 64 op, 1012608800.00 ns, 15.8220 ms/op
WorkloadResult 10: 64 op, 1012631500.00 ns, 15.8224 ms/op
WorkloadResult 11: 64 op, 1006935800.00 ns, 15.7334 ms/op
WorkloadResult 12: 64 op, 1008642300.00 ns, 15.7600 ms/op
WorkloadResult 13: 64 op, 1004947400.00 ns, 15.7023 ms/op
GC: 0 0 0 480 64
Threading: 0 0 64
// AfterAll
// Benchmark Process 12688 has exited with code 0.
Mean = 15.666 ms, StdErr = 0.047 ms (0.30%), N = 13, StdDev = 0.170 ms
Min = 15.397 ms, Q1 = 15.494 ms, Median = 15.702 ms, Q3 = 15.822 ms, Max = 15.881 ms
IQR = 0.328 ms, LowerFence = 15.003 ms, UpperFence = 16.313 ms
ConfidenceInterval = [15.463 ms; 15.869 ms] (CI 99.9%), Margin = 0.203 ms (1.30% of Mean)
Skewness = -0.36, Kurtosis = 1.49, MValue = 2
// **************************
// Benchmark: benchmarker.efficient2: DefaultJob
// *** Execute ***
// Launch: 1 / 1
// Execute: dotnet "e40dbc85-4fa0-48f1-b4dc-15032659eca7.dll" --benchmarkName "Program+benchmarker.efficient2" --job "Default" --benchmarkId 4 in C:\Workspace\Projects\DotnetTest\FsTest\bin\Release\net6.0\e40dbc85-4fa0-48f1-b4dc-15032659eca7\bin\Release\net6.0
// BeforeAnythingElse
// Benchmark Process Environment Information:
// Runtime=.NET 6.0.9 (6.0.922.41905), X64 RyuJIT
// GC=Concurrent Workstation
// Job: DefaultJob
OverheadJitting 1: 1 op, 261100.00 ns, 261.1000 us/op
WorkloadJitting 1: 1 op, 16795900.00 ns, 16.7959 ms/op
OverheadJitting 2: 16 op, 421900.00 ns, 26.3687 us/op
WorkloadJitting 2: 16 op, 221002600.00 ns, 13.8127 ms/op
WorkloadPilot 1: 16 op, 216778300.00 ns, 13.5486 ms/op
WorkloadPilot 2: 32 op, 473267100.00 ns, 14.7896 ms/op
WorkloadPilot 3: 64 op, 876741500.00 ns, 13.6991 ms/op
OverheadWarmup 1: 64 op, 2300.00 ns, 35.9375 ns/op
OverheadWarmup 2: 64 op, 500.00 ns, 7.8125 ns/op
OverheadWarmup 3: 64 op, 600.00 ns, 9.3750 ns/op
OverheadWarmup 4: 64 op, 500.00 ns, 7.8125 ns/op
OverheadWarmup 5: 64 op, 500.00 ns, 7.8125 ns/op
OverheadWarmup 6: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 1: 64 op, 400.00 ns, 6.2500 ns/op
OverheadActual 2: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 3: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 4: 64 op, 400.00 ns, 6.2500 ns/op
OverheadActual 5: 64 op, 400.00 ns, 6.2500 ns/op
OverheadActual 6: 64 op, 600.00 ns, 9.3750 ns/op
OverheadActual 7: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 8: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 9: 64 op, 400.00 ns, 6.2500 ns/op
OverheadActual 10: 64 op, 400.00 ns, 6.2500 ns/op
OverheadActual 11: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 12: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 13: 64 op, 400.00 ns, 6.2500 ns/op
OverheadActual 14: 64 op, 400.00 ns, 6.2500 ns/op
OverheadActual 15: 64 op, 400.00 ns, 6.2500 ns/op
OverheadActual 16: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 17: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 18: 64 op, 500.00 ns, 7.8125 ns/op
OverheadActual 19: 64 op, 400.00 ns, 6.2500 ns/op
OverheadActual 20: 64 op, 1200.00 ns, 18.7500 ns/op
WorkloadWarmup 1: 64 op, 893231800.00 ns, 13.9567 ms/op
WorkloadWarmup 2: 64 op, 877971400.00 ns, 13.7183 ms/op
WorkloadWarmup 3: 64 op, 891409400.00 ns, 13.9283 ms/op
WorkloadWarmup 4: 64 op, 876350300.00 ns, 13.6930 ms/op
WorkloadWarmup 5: 64 op, 906409800.00 ns, 14.1627 ms/op
WorkloadWarmup 6: 64 op, 895097100.00 ns, 13.9859 ms/op
// BeforeActualRun
WorkloadActual 1: 64 op, 903317300.00 ns, 14.1143 ms/op
WorkloadActual 2: 64 op, 906945100.00 ns, 14.1710 ms/op
WorkloadActual 3: 64 op, 911465300.00 ns, 14.2416 ms/op
WorkloadActual 4: 64 op, 914492500.00 ns, 14.2889 ms/op
WorkloadActual 5: 64 op, 924223100.00 ns, 14.4410 ms/op
WorkloadActual 6: 64 op, 914213500.00 ns, 14.2846 ms/op
WorkloadActual 7: 64 op, 885128400.00 ns, 13.8301 ms/op
WorkloadActual 8: 64 op, 911955400.00 ns, 14.2493 ms/op
WorkloadActual 9: 64 op, 908607400.00 ns, 14.1970 ms/op
WorkloadActual 10: 64 op, 930277000.00 ns, 14.5356 ms/op
WorkloadActual 11: 64 op, 911458900.00 ns, 14.2415 ms/op
WorkloadActual 12: 64 op, 909132800.00 ns, 14.2052 ms/op
WorkloadActual 13: 64 op, 903540400.00 ns, 14.1178 ms/op
WorkloadActual 14: 64 op, 899302700.00 ns, 14.0516 ms/op
WorkloadActual 15: 64 op, 918961300.00 ns, 14.3588 ms/op
// AfterActualRun
WorkloadResult 1: 64 op, 903316800.00 ns, 14.1143 ms/op
WorkloadResult 2: 64 op, 906944600.00 ns, 14.1710 ms/op
WorkloadResult 3: 64 op, 911464800.00 ns, 14.2416 ms/op
WorkloadResult 4: 64 op, 914492000.00 ns, 14.2889 ms/op
WorkloadResult 5: 64 op, 924222600.00 ns, 14.4410 ms/op
WorkloadResult 6: 64 op, 914213000.00 ns, 14.2846 ms/op
WorkloadResult 7: 64 op, 885127900.00 ns, 13.8301 ms/op
WorkloadResult 8: 64 op, 911954900.00 ns, 14.2493 ms/op
WorkloadResult 9: 64 op, 908606900.00 ns, 14.1970 ms/op
WorkloadResult 10: 64 op, 911458400.00 ns, 14.2415 ms/op
WorkloadResult 11: 64 op, 909132300.00 ns, 14.2052 ms/op
WorkloadResult 12: 64 op, 903539900.00 ns, 14.1178 ms/op
WorkloadResult 13: 64 op, 899302200.00 ns, 14.0516 ms/op
WorkloadResult 14: 64 op, 918960800.00 ns, 14.3588 ms/op
GC: 0 0 0 528 64
Threading: 0 0 64
// AfterAll
// Benchmark Process 27348 has exited with code 0.
Mean = 14.199 ms, StdErr = 0.039 ms (0.28%), N = 14, StdDev = 0.146 ms
Min = 13.830 ms, Q1 = 14.131 ms, Median = 14.223 ms, Q3 = 14.276 ms, Max = 14.441 ms
IQR = 0.145 ms, LowerFence = 13.914 ms, UpperFence = 14.493 ms
ConfidenceInterval = [14.035 ms; 14.364 ms] (CI 99.9%), Margin = 0.165 ms (1.16% of Mean)
Skewness = -0.8, Kurtosis = 3.65, MValue = 2
// **************************
// Benchmark: benchmarker.efficientAnd: DefaultJob
// *** Execute ***
// Launch: 1 / 1
// Execute: dotnet "e40dbc85-4fa0-48f1-b4dc-15032659eca7.dll" --benchmarkName "Program+benchmarker.efficientAnd" --job "Default" --benchmarkId 5 in C:\Workspace\Projects\DotnetTest\FsTest\bin\Release\net6.0\e40dbc85-4fa0-48f1-b4dc-15032659eca7\bin\Release\net6.0
// BeforeAnythingElse
// Benchmark Process Environment Information:
// Runtime=.NET 6.0.9 (6.0.922.41905), X64 RyuJIT
// GC=Concurrent Workstation
// Job: DefaultJob
OverheadJitting 1: 1 op, 204900.00 ns, 204.9000 us/op
WorkloadJitting 1: 1 op, 417843100.00 ns, 417.8431 ms/op
WorkloadWarmup 1: 1 op, 406531700.00 ns, 406.5317 ms/op
WorkloadWarmup 2: 1 op, 404956900.00 ns, 404.9569 ms/op
WorkloadWarmup 3: 1 op, 404623000.00 ns, 404.6230 ms/op
WorkloadWarmup 4: 1 op, 418298300.00 ns, 418.2983 ms/op
WorkloadWarmup 5: 1 op, 404885200.00 ns, 404.8852 ms/op
WorkloadWarmup 6: 1 op, 405885800.00 ns, 405.8858 ms/op
WorkloadWarmup 7: 1 op, 404638000.00 ns, 404.6380 ms/op
// BeforeActualRun
WorkloadActual 1: 1 op, 411534700.00 ns, 411.5347 ms/op
WorkloadActual 2: 1 op, 407860500.00 ns, 407.8605 ms/op
WorkloadActual 3: 1 op, 414312100.00 ns, 414.3121 ms/op
WorkloadActual 4: 1 op, 411081700.00 ns, 411.0817 ms/op
WorkloadActual 5: 1 op, 412231700.00 ns, 412.2317 ms/op
WorkloadActual 6: 1 op, 406593200.00 ns, 406.5932 ms/op
WorkloadActual 7: 1 op, 405555500.00 ns, 405.5555 ms/op
WorkloadActual 8: 1 op, 405699100.00 ns, 405.6991 ms/op
WorkloadActual 9: 1 op, 418109300.00 ns, 418.1093 ms/op
WorkloadActual 10: 1 op, 406420300.00 ns, 406.4203 ms/op
WorkloadActual 11: 1 op, 406160200.00 ns, 406.1602 ms/op
WorkloadActual 12: 1 op, 406133600.00 ns, 406.1336 ms/op
WorkloadActual 13: 1 op, 412494900.00 ns, 412.4949 ms/op
WorkloadActual 14: 1 op, 408588600.00 ns, 408.5886 ms/op
WorkloadActual 15: 1 op, 410920500.00 ns, 410.9205 ms/op
// AfterActualRun
WorkloadResult 1: 1 op, 411534700.00 ns, 411.5347 ms/op
WorkloadResult 2: 1 op, 407860500.00 ns, 407.8605 ms/op
WorkloadResult 3: 1 op, 414312100.00 ns, 414.3121 ms/op
WorkloadResult 4: 1 op, 411081700.00 ns, 411.0817 ms/op
WorkloadResult 5: 1 op, 412231700.00 ns, 412.2317 ms/op
WorkloadResult 6: 1 op, 406593200.00 ns, 406.5932 ms/op
WorkloadResult 7: 1 op, 405555500.00 ns, 405.5555 ms/op
WorkloadResult 8: 1 op, 405699100.00 ns, 405.6991 ms/op
WorkloadResult 9: 1 op, 418109300.00 ns, 418.1093 ms/op
WorkloadResult 10: 1 op, 406420300.00 ns, 406.4203 ms/op
WorkloadResult 11: 1 op, 406160200.00 ns, 406.1602 ms/op
WorkloadResult 12: 1 op, 406133600.00 ns, 406.1336 ms/op
WorkloadResult 13: 1 op, 412494900.00 ns, 412.4949 ms/op
WorkloadResult 14: 1 op, 408588600.00 ns, 408.5886 ms/op
WorkloadResult 15: 1 op, 410920500.00 ns, 410.9205 ms/op
GC: 0 0 0 480 1
Threading: 0 0 1
// AfterAll
// Benchmark Process 22164 has exited with code 0.
Mean = 409.580 ms, StdErr = 0.967 ms (0.24%), N = 15, StdDev = 3.744 ms
Min = 405.555 ms, Q1 = 406.290 ms, Median = 408.589 ms, Q3 = 411.883 ms, Max = 418.109 ms
IQR = 5.593 ms, LowerFence = 397.901 ms, UpperFence = 420.273 ms
ConfidenceInterval = [405.577 ms; 413.582 ms] (CI 99.9%), Margin = 4.002 ms (0.98% of Mean)
Skewness = 0.65, Kurtosis = 2.34, MValue = 2
// **************************
// Benchmark: benchmarker.efficientAnd5: DefaultJob
// *** Execute ***
// Launch: 1 / 1
// Execute: dotnet "e40dbc85-4fa0-48f1-b4dc-15032659eca7.dll" --benchmarkName "Program+benchmarker.efficientAnd5" --job "Default" --benchmarkId 6 in C:\Workspace\Projects\DotnetTest\FsTest\bin\Release\net6.0\e40dbc85-4fa0-48f1-b4dc-15032659eca7\bin\Release\net6.0
// BeforeAnythingElse
// Benchmark Process Environment Information:
// Runtime=.NET 6.0.9 (6.0.922.41905), X64 RyuJIT
// GC=Concurrent Workstation
// Job: DefaultJob
OverheadJitting 1: 1 op, 238500.00 ns, 238.5000 us/op
WorkloadJitting 1: 1 op, 30537700.00 ns, 30.5377 ms/op
OverheadJitting 2: 16 op, 326800.00 ns, 20.4250 us/op
WorkloadJitting 2: 16 op, 471344200.00 ns, 29.4590 ms/op
WorkloadPilot 1: 16 op, 445928500.00 ns, 27.8705 ms/op
WorkloadPilot 2: 32 op, 901550900.00 ns, 28.1735 ms/op
OverheadWarmup 1: 32 op, 2000.00 ns, 62.5000 ns/op
OverheadWarmup 2: 32 op, 400.00 ns, 12.5000 ns/op
OverheadWarmup 3: 32 op, 600.00 ns, 18.7500 ns/op
OverheadWarmup 4: 32 op, 400.00 ns, 12.5000 ns/op
OverheadWarmup 5: 32 op, 500.00 ns, 15.6250 ns/op
OverheadWarmup 6: 32 op, 300.00 ns, 9.3750 ns/op
OverheadActual 1: 32 op, 400.00 ns, 12.5000 ns/op
OverheadActual 2: 32 op, 400.00 ns, 12.5000 ns/op
OverheadActual 3: 32 op, 400.00 ns, 12.5000 ns/op
OverheadActual 4: 32 op, 500.00 ns, 15.6250 ns/op
OverheadActual 5: 32 op, 400.00 ns, 12.5000 ns/op
OverheadActual 6: 32 op, 300.00 ns, 9.3750 ns/op
OverheadActual 7: 32 op, 300.00 ns, 9.3750 ns/op
OverheadActual 8: 32 op, 300.00 ns, 9.3750 ns/op
OverheadActual 9: 32 op, 400.00 ns, 12.5000 ns/op
OverheadActual 10: 32 op, 400.00 ns, 12.5000 ns/op
OverheadActual 11: 32 op, 400.00 ns, 12.5000 ns/op
OverheadActual 12: 32 op, 300.00 ns, 9.3750 ns/op
OverheadActual 13: 32 op, 600.00 ns, 18.7500 ns/op
OverheadActual 14: 32 op, 500.00 ns, 15.6250 ns/op
OverheadActual 15: 32 op, 500.00 ns, 15.6250 ns/op
OverheadActual 16: 32 op, 400.00 ns, 12.5000 ns/op
OverheadActual 17: 32 op, 400.00 ns, 12.5000 ns/op
OverheadActual 18: 32 op, 500.00 ns, 15.6250 ns/op
OverheadActual 19: 32 op, 600.00 ns, 18.7500 ns/op
OverheadActual 20: 32 op, 500.00 ns, 15.6250 ns/op
WorkloadWarmup 1: 32 op, 918289700.00 ns, 28.6966 ms/op
WorkloadWarmup 2: 32 op, 926214500.00 ns, 28.9442 ms/op
WorkloadWarmup 3: 32 op, 895465700.00 ns, 27.9833 ms/op
WorkloadWarmup 4: 32 op, 893759500.00 ns, 27.9300 ms/op
WorkloadWarmup 5: 32 op, 936415600.00 ns, 29.2630 ms/op
WorkloadWarmup 6: 32 op, 887867900.00 ns, 27.7459 ms/op
// BeforeActualRun
WorkloadActual 1: 32 op, 889600400.00 ns, 27.8000 ms/op
WorkloadActual 2: 32 op, 886727800.00 ns, 27.7102 ms/op
WorkloadActual 3: 32 op, 879754300.00 ns, 27.4923 ms/op
WorkloadActual 4: 32 op, 887815500.00 ns, 27.7442 ms/op
WorkloadActual 5: 32 op, 867897900.00 ns, 27.1218 ms/op
WorkloadActual 6: 32 op, 896672900.00 ns, 28.0210 ms/op
WorkloadActual 7: 32 op, 898033800.00 ns, 28.0636 ms/op
WorkloadActual 8: 32 op, 889075400.00 ns, 27.7836 ms/op
WorkloadActual 9: 32 op, 907207300.00 ns, 28.3502 ms/op
WorkloadActual 10: 32 op, 1000374700.00 ns, 31.2617 ms/op
WorkloadActual 11: 32 op, 966527800.00 ns, 30.2040 ms/op
WorkloadActual 12: 32 op, 949449900.00 ns, 29.6703 ms/op
WorkloadActual 13: 32 op, 938657000.00 ns, 29.3330 ms/op
WorkloadActual 14: 32 op, 913967500.00 ns, 28.5615 ms/op
WorkloadActual 15: 32 op, 889990600.00 ns, 27.8122 ms/op
WorkloadActual 16: 32 op, 878714900.00 ns, 27.4598 ms/op
WorkloadActual 17: 32 op, 882759400.00 ns, 27.5862 ms/op
WorkloadActual 18: 32 op, 917719200.00 ns, 28.6787 ms/op
WorkloadActual 19: 32 op, 861346100.00 ns, 26.9171 ms/op
WorkloadActual 20: 32 op, 929824000.00 ns, 29.0570 ms/op
WorkloadActual 21: 32 op, 898899400.00 ns, 28.0906 ms/op
WorkloadActual 22: 32 op, 905622400.00 ns, 28.3007 ms/op
WorkloadActual 23: 32 op, 899546300.00 ns, 28.1108 ms/op
WorkloadActual 24: 32 op, 863100800.00 ns, 26.9719 ms/op
WorkloadActual 25: 32 op, 914005100.00 ns, 28.5627 ms/op
// AfterActualRun
WorkloadResult 1: 32 op, 889600000.00 ns, 27.8000 ms/op
WorkloadResult 2: 32 op, 886727400.00 ns, 27.7102 ms/op
WorkloadResult 3: 32 op, 879753900.00 ns, 27.4923 ms/op
WorkloadResult 4: 32 op, 887815100.00 ns, 27.7442 ms/op
WorkloadResult 5: 32 op, 867897500.00 ns, 27.1218 ms/op
WorkloadResult 6: 32 op, 896672500.00 ns, 28.0210 ms/op
WorkloadResult 7: 32 op, 898033400.00 ns, 28.0635 ms/op
WorkloadResult 8: 32 op, 889075000.00 ns, 27.7836 ms/op
WorkloadResult 9: 32 op, 907206900.00 ns, 28.3502 ms/op
WorkloadResult 10: 32 op, 949449500.00 ns, 29.6703 ms/op
WorkloadResult 11: 32 op, 938656600.00 ns, 29.3330 ms/op
WorkloadResult 12: 32 op, 913967100.00 ns, 28.5615 ms/op
WorkloadResult 13: 32 op, 889990200.00 ns, 27.8122 ms/op
WorkloadResult 14: 32 op, 878714500.00 ns, 27.4598 ms/op
WorkloadResult 15: 32 op, 882759000.00 ns, 27.5862 ms/op
WorkloadResult 16: 32 op, 917718800.00 ns, 28.6787 ms/op
WorkloadResult 17: 32 op, 861345700.00 ns, 26.9171 ms/op
WorkloadResult 18: 32 op, 929823600.00 ns, 29.0570 ms/op
WorkloadResult 19: 32 op, 898899000.00 ns, 28.0906 ms/op
WorkloadResult 20: 32 op, 905622000.00 ns, 28.3007 ms/op
WorkloadResult 21: 32 op, 899545900.00 ns, 28.1108 ms/op
WorkloadResult 22: 32 op, 863100400.00 ns, 26.9719 ms/op
WorkloadResult 23: 32 op, 914004700.00 ns, 28.5626 ms/op
GC: 0 0 0 480 32
Threading: 0 0 32
// AfterAll
// Benchmark Process 2628 has exited with code 0.
Mean = 28.052 ms, StdErr = 0.147 ms (0.52%), N = 23, StdDev = 0.705 ms
Min = 26.917 ms, Q1 = 27.648 ms, Median = 28.021 ms, Q3 = 28.456 ms, Max = 29.670 ms
IQR = 0.808 ms, LowerFence = 26.437 ms, UpperFence = 29.667 ms
ConfidenceInterval = [27.494 ms; 28.610 ms] (CI 99.9%), Margin = 0.558 ms (1.99% of Mean)
Skewness = 0.47, Kurtosis = 2.62, MValue = 2
// ***** BenchmarkRunner: Finish *****
// * Export *
BenchmarkDotNet.Artifacts\results\Program.benchmarker-report.csv
BenchmarkDotNet.Artifacts\results\Program.benchmarker-report-github.md
BenchmarkDotNet.Artifacts\results\Program.benchmarker-report.html
// * Detailed results *
benchmarker.old: DefaultJob
Runtime = .NET 6.0.9 (6.0.922.41905), X64 RyuJIT; GC = Concurrent Workstation
Mean = 312.008 ms, StdErr = 1.694 ms (0.54%), N = 36, StdDev = 10.165 ms
Min = 300.010 ms, Q1 = 304.040 ms, Median = 307.925 ms, Q3 = 319.376 ms, Max = 337.494 ms
IQR = 15.336 ms, LowerFence = 281.036 ms, UpperFence = 342.381 ms
ConfidenceInterval = [305.925 ms; 318.092 ms] (CI 99.9%), Margin = 6.084 ms (1.95% of Mean)
Skewness = 0.85, Kurtosis = 2.57, MValue = 2
-------------------- Histogram --------------------
[295.970 ms ; 308.823 ms) | @@@@@@@@@@@@@@@@@@@
[308.823 ms ; 320.327 ms) | @@@@@@@@@@
[320.327 ms ; 333.660 ms) | @@@@@@
[333.660 ms ; 341.535 ms) | @
---------------------------------------------------
benchmarker.oldAnd: DefaultJob
Runtime = .NET 6.0.9 (6.0.922.41905), X64 RyuJIT; GC = Concurrent Workstation
Mean = 440.199 ms, StdErr = 2.370 ms (0.54%), N = 29, StdDev = 12.763 ms
Min = 423.253 ms, Q1 = 432.577 ms, Median = 437.553 ms, Q3 = 448.124 ms, Max = 471.506 ms
IQR = 15.547 ms, LowerFence = 409.257 ms, UpperFence = 471.445 ms
ConfidenceInterval = [431.491 ms; 448.906 ms] (CI 99.9%), Margin = 8.707 ms (1.98% of Mean)
Skewness = 0.79, Kurtosis = 2.9, MValue = 2
-------------------- Histogram --------------------
[420.437 ms ; 432.113 ms) | @@@@@@@
[432.113 ms ; 443.018 ms) | @@@@@@@@@@@@
[443.018 ms ; 456.766 ms) | @@@@@@@@
[456.766 ms ; 476.958 ms) | @@
---------------------------------------------------
benchmarker.oldAnd5: DefaultJob
Runtime = .NET 6.0.9 (6.0.922.41905), X64 RyuJIT; GC = Concurrent Workstation
Mean = 99.637 ms, StdErr = 0.422 ms (0.42%), N = 16, StdDev = 1.688 ms
Min = 97.188 ms, Q1 = 98.169 ms, Median = 99.582 ms, Q3 = 100.134 ms, Max = 102.622 ms
IQR = 1.964 ms, LowerFence = 95.223 ms, UpperFence = 103.080 ms
ConfidenceInterval = [97.919 ms; 101.356 ms] (CI 99.9%), Margin = 1.719 ms (1.73% of Mean)
Skewness = 0.36, Kurtosis = 2.04, MValue = 2
-------------------- Histogram --------------------
[96.725 ms ; 98.717 ms) | @@@@@
[98.717 ms ; 103.311 ms) | @@@@@@@@@@@
---------------------------------------------------
benchmarker.efficient: DefaultJob
Runtime = .NET 6.0.9 (6.0.922.41905), X64 RyuJIT; GC = Concurrent Workstation
Mean = 15.666 ms, StdErr = 0.047 ms (0.30%), N = 13, StdDev = 0.170 ms
Min = 15.397 ms, Q1 = 15.494 ms, Median = 15.702 ms, Q3 = 15.822 ms, Max = 15.881 ms
IQR = 0.328 ms, LowerFence = 15.003 ms, UpperFence = 16.313 ms
ConfidenceInterval = [15.463 ms; 15.869 ms] (CI 99.9%), Margin = 0.203 ms (1.30% of Mean)
Skewness = -0.36, Kurtosis = 1.49, MValue = 2
-------------------- Histogram --------------------
[15.302 ms ; 15.920 ms) | @@@@@@@@@@@@@
---------------------------------------------------
benchmarker.efficient2: DefaultJob
Runtime = .NET 6.0.9 (6.0.922.41905), X64 RyuJIT; GC = Concurrent Workstation
Mean = 14.199 ms, StdErr = 0.039 ms (0.28%), N = 14, StdDev = 0.146 ms
Min = 13.830 ms, Q1 = 14.131 ms, Median = 14.223 ms, Q3 = 14.276 ms, Max = 14.441 ms
IQR = 0.145 ms, LowerFence = 13.914 ms, UpperFence = 14.493 ms
ConfidenceInterval = [14.035 ms; 14.364 ms] (CI 99.9%), Margin = 0.165 ms (1.16% of Mean)
Skewness = -0.8, Kurtosis = 3.65, MValue = 2
-------------------- Histogram --------------------
[13.750 ms ; 14.088 ms) | @@
[14.088 ms ; 14.521 ms) | @@@@@@@@@@@@
---------------------------------------------------
benchmarker.efficientAnd: DefaultJob
Runtime = .NET 6.0.9 (6.0.922.41905), X64 RyuJIT; GC = Concurrent Workstation
Mean = 409.580 ms, StdErr = 0.967 ms (0.24%), N = 15, StdDev = 3.744 ms
Min = 405.555 ms, Q1 = 406.290 ms, Median = 408.589 ms, Q3 = 411.883 ms, Max = 418.109 ms
IQR = 5.593 ms, LowerFence = 397.901 ms, UpperFence = 420.273 ms
ConfidenceInterval = [405.577 ms; 413.582 ms] (CI 99.9%), Margin = 4.002 ms (0.98% of Mean)
Skewness = 0.65, Kurtosis = 2.34, MValue = 2
-------------------- Histogram --------------------
[403.563 ms ; 420.102 ms) | @@@@@@@@@@@@@@@
---------------------------------------------------
benchmarker.efficientAnd5: DefaultJob
Runtime = .NET 6.0.9 (6.0.922.41905), X64 RyuJIT; GC = Concurrent Workstation
Mean = 28.052 ms, StdErr = 0.147 ms (0.52%), N = 23, StdDev = 0.705 ms
Min = 26.917 ms, Q1 = 27.648 ms, Median = 28.021 ms, Q3 = 28.456 ms, Max = 29.670 ms
IQR = 0.808 ms, LowerFence = 26.437 ms, UpperFence = 29.667 ms
ConfidenceInterval = [27.494 ms; 28.610 ms] (CI 99.9%), Margin = 0.558 ms (1.99% of Mean)
Skewness = 0.47, Kurtosis = 2.62, MValue = 2
-------------------- Histogram --------------------
[26.694 ms ; 27.460 ms) | @@@
[27.460 ms ; 28.111 ms) | @@@@@@@@@@@@
[28.111 ms ; 28.815 ms) | @@@@@
[28.815 ms ; 29.689 ms) | @@@
---------------------------------------------------
// * Summary *
BenchmarkDotNet=v0.13.1, OS=Windows 10.0.22000
AMD Ryzen 7 PRO 5850U with Radeon Graphics, 1 CPU, 16 logical and 8 physical cores
.NET SDK=6.0.401
[Host] : .NET 6.0.9 (6.0.922.41905), X64 RyuJIT DEBUG
DefaultJob : .NET 6.0.9 (6.0.922.41905), X64 RyuJIT
| Method | Mean | Error | StdDev | Gen 0 | Allocated |
|-------------- |----------:|---------:|----------:|------------:|--------------:|
| old | 312.01 ms | 6.084 ms | 10.165 ms | 112000.0000 | 940,000,592 B |
| oldAnd | 440.20 ms | 8.707 ms | 12.763 ms | 28000.0000 | 240,000,504 B |
| oldAnd5 | 99.64 ms | 1.719 ms | 1.688 ms | - | 111 B |
| efficient | 15.67 ms | 0.203 ms | 0.170 ms | - | 8 B |
| efficient2 | 14.20 ms | 0.165 ms | 0.146 ms | - | 8 B |
| efficientAnd | 409.58 ms | 4.002 ms | 3.744 ms | - | 480 B |
| efficientAnd5 | 28.05 ms | 0.558 ms | 0.705 ms | - | 15 B |
// * Hints *
Outliers
benchmarker.old: Default -> 1 outlier was removed (365.19 ms)
benchmarker.oldAnd: Default -> 1 outlier was removed (476.47 ms)
benchmarker.oldAnd5: Default -> 1 outlier was removed (104.89 ms)
benchmarker.efficient: Default -> 2 outliers were removed (16.27 ms, 16.41 ms)
benchmarker.efficient2: Default -> 1 outlier was removed, 2 outliers were detected (13.83 ms, 14.54 ms)
benchmarker.efficientAnd5: Default -> 2 outliers were removed (30.20 ms, 31.26 ms)
// * Legends *
Mean : Arithmetic mean of all measurements
Error : Half of 99.9% confidence interval
StdDev : Standard deviation of all measurements
Gen 0 : GC Generation 0 collects per 1000 operations
Allocated : Allocated memory per single operation (managed only, inclusive, 1KB = 1024B)
1 ms : 1 Millisecond (0.001 sec)
// * Diagnostic Output - MemoryDiagnoser *
// ***** BenchmarkRunner: End *****
// ** Remained 0 benchmark(s) to run **
Run time: 00:02:23 (143.66 sec), executed benchmarks: 7
Global total time: 00:02:28 (148.14 sec), executed benchmarks: 7
// * Artifacts cleanup *
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment