diff --git a/BitFaster.Caching.Benchmarks/Lru/LruCycleBench.cs b/BitFaster.Caching.Benchmarks/Lru/LruCycleBench.cs new file mode 100644 index 00000000..414f3692 --- /dev/null +++ b/BitFaster.Caching.Benchmarks/Lru/LruCycleBench.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using BenchmarkDotNet.Attributes; +using BitFaster.Caching.Lru; + +namespace BitFaster.Caching.Benchmarks.Lru +{ + [DisassemblyDiagnoser(printSource: true)] + [MemoryDiagnoser] + public class LruCycleBench + { + private static readonly ClassicLru classicLru = new(8, 9, EqualityComparer.Default); + private static readonly ConcurrentLru concurrentLru = new(8, 9, EqualityComparer.Default); + private static readonly ConcurrentTLru concurrentTlru = new(8, 9, EqualityComparer.Default, TimeSpan.FromMinutes(10)); + private static readonly FastConcurrentLru fastConcurrentLru = new(8, 9, EqualityComparer.Default); + private static readonly FastConcurrentTLru fastConcurrentTLru = new(8, 9, EqualityComparer.Default, TimeSpan.FromMinutes(1)); + + [Benchmark()] + public void FastConcurrentLru() + { + Func func = x => x; + + for (int i = 0; i < 128; i++) + fastConcurrentLru.GetOrAdd(i, func); + } + + [Benchmark()] + public void ConcurrentLru() + { + Func func = x => x; + + for (int i = 0; i < 128; i++) + concurrentLru.GetOrAdd(i, func); + } + + [Benchmark()] + public void FastConcurrentTLru() + { + Func func = x => x; + + for (int i = 0; i < 128; i++) + fastConcurrentTLru.GetOrAdd(i, func); + } + + [Benchmark()] + public void ConcurrentTLru() + { + Func func = x => x; + + for (int i = 0; i < 128; i++) + concurrentTlru.GetOrAdd(i, func); + } + } +}