From c97651eb5ccb25429adab59e58fc9db977dc9a80 Mon Sep 17 00:00:00 2001 From: mlemanczyk Date: Thu, 25 May 2023 19:22:02 +0200 Subject: [PATCH] Task creation benchmarks added. --- ...TaskRunVsTaskFactoryStartNew.Benchmarks.cs | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 Recyclable.Collections.Benchmarks/POC/TaskRunVsTaskFactoryStartNew.Benchmarks.cs 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