From 28ca343b4347797019ac30a8c51df61cfb994915 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Fri, 10 Oct 2025 14:21:54 +0300 Subject: [PATCH] perf: improved pool return method by using a hashset for searching if the returning item is already queued --- Engine.Core/Helpers/Pool.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Engine.Core/Helpers/Pool.cs b/Engine.Core/Helpers/Pool.cs index 980823f..a5cfc9a 100644 --- a/Engine.Core/Helpers/Pool.cs +++ b/Engine.Core/Helpers/Pool.cs @@ -10,22 +10,25 @@ public class Pool : IPool private readonly Func generator = null!; private readonly Queue queue = new(); + private readonly HashSet queuedHashes = []; public T Get() { if (!queue.TryDequeue(out T? result)) result = generator(); + queuedHashes.Remove(result); OnRemoved?.Invoke(this, result); return result; } public void Return(T item) { - if (queue.Contains(item)) + if (queuedHashes.Contains(item)) return; queue.Enqueue(item); + queuedHashes.Add(item); OnReturned?.Invoke(this, item); }