diff --git a/Recyclable.Collections.Benchmarks/POC/TaskRunVsTaskFactoryStartNew.Benchmarks.cs b/Recyclable.Collections.Benchmarks/POC/TaskRunVsTaskFactoryStartNew.Benchmarks.cs new file mode 100644 index 0000000..546d108 --- /dev/null +++ b/Recyclable.Collections.Benchmarks/POC/TaskRunVsTaskFactoryStartNew.Benchmarks.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Threading.Tasks.Sources; +using BenchmarkDotNet.Attributes; +using Microsoft.Extensions.ObjectPool; + +namespace Recyclable.Collections.Benchmarks.POC +{ + [MemoryDiagnoser] + public class TaskRunVsTaskFactoryStartNewBenchmarks + { + public int NumberOfTasks = 100; + private static readonly TaskFactory TaskPool = new(); + + [Benchmark] + public void OwnTaskFactory() + { + for (var i = 0; i < NumberOfTasks; i++) + { + _ = TaskPool.StartNew(() => {}); + } + } + + [Benchmark] + public void TaskRun() + { + for (var i = 0; i < NumberOfTasks; i++) + { + _ = Task.Run(() => { }); + } + } + + [Benchmark(Baseline = true)] + public void TaskFactoryStartNew() + { + for (var i = 0; i < NumberOfTasks; i++) + { + _ = Task.Factory.StartNew(() => { }); + } + } + + [Benchmark] + public void TaskConstructor() + { + for (var i = 0; i < NumberOfTasks; i++) + { + new Task(() => { }).Start(); + } + } + + [Benchmark] + public void TaskConstructorWithKnownScheduler() + { + TaskScheduler scheduler = TaskScheduler.Current; + for (var i = 0; i < NumberOfTasks; i++) + { + new Task(() => { }).Start(scheduler); + } + } + } +} \ No newline at end of file