Isolate CPU divisor pools per thread

This commit is contained in:
Marek Lemańczyk committed 2025-10-11 21:17:12 +02:00
1 parent cd69c08fb4
commit 8e9390bc5e
7 files changed
+61 -34

No files matched your search

+3 -3
View File
@@ -49,12 +49,12 @@ namespace PerfectNumbers.Core
FactorEntry[]? source = Factors;
if (source is null || Count == 0)
{
FactorEntry[] local = ArrayPool<FactorEntry>.Shared.Rent(1);
FactorEntry[] local = ThreadLocalArrayPool<FactorEntry>.Shared.Rent(1);
local[0] = new FactorEntry(prime);
return Rent(local, 1UL, true, 1);
}
FactorEntry[] extended = ArrayPool<FactorEntry>.Shared.Rent(Count + 1);
FactorEntry[] extended = ThreadLocalArrayPool<FactorEntry>.Shared.Rent(Count + 1);
Array.Copy(source, 0, extended, 0, Count);
extended[Count] = new FactorEntry(prime);
Span<FactorEntry> span = extended.AsSpan(0, Count + 1);
@@ -70,7 +70,7 @@ namespace PerfectNumbers.Core
if (factors is not null)
{
Factors = null;
ArrayPool<FactorEntry>.Shared.Return(factors, clearArray: false);
ThreadLocalArrayPool<FactorEntry>.Shared.Return(factors, clearArray: false);
}
_next = s_poolHead;