Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Extensions;
using MicroBenchmarks;
using Microsoft.Extensions.Primitives;
using System;
using System.Linq;

Expand All @@ -16,7 +17,7 @@ public class MemoryCacheTests
private MemoryCache _memCache;
private (object key, object value)[] _items;

[GlobalSetup(Targets = new[] { nameof(GetHit), nameof(TryGetValueHit), nameof(GetMiss), nameof(TryGetValueMiss), nameof(SetOverride) })]
[GlobalSetup(Targets = new[] { nameof(GetHit), nameof(TryGetValueHit), nameof(GetMiss), nameof(TryGetValueMiss), nameof(SetOverride), nameof(CreateEntry) })]
public void SetupBasic()
{
_memCache = new MemoryCache(new MemoryCacheOptions());
Expand All @@ -26,7 +27,7 @@ public void SetupBasic()
}
}

[GlobalCleanup(Targets = new[] { nameof(GetHit), nameof(TryGetValueHit), nameof(GetMiss), nameof(TryGetValueMiss), nameof(SetOverride) })]
[GlobalCleanup(Targets = new[] { nameof(GetHit), nameof(TryGetValueHit), nameof(GetMiss), nameof(TryGetValueMiss), nameof(SetOverride), nameof(CreateEntry) })]
public void CleanupBasic() => _memCache.Dispose();

[Benchmark]
Expand All @@ -44,7 +45,10 @@ public void SetupBasic()
[Benchmark]
public object SetOverride() => _memCache.Set("512", "512");

[GlobalSetup(Targets = new[] { nameof(AddThenRemove_NoExpiration), nameof(AddThenRemove_AbsoluteExpiration), nameof(AddThenRemove_RelativeExpiration), nameof(AddThenRemove_SlidingExpiration) })]
[Benchmark]
public void CreateEntry() => _memCache.CreateEntry(this).Dispose();

[GlobalSetup(Targets = new[] { nameof(AddThenRemove_NoExpiration), nameof(AddThenRemove_AbsoluteExpiration), nameof(AddThenRemove_RelativeExpiration), nameof(AddThenRemove_SlidingExpiration), nameof(AddThenRemove_ExpirationTokens) })]
public void Setup_AddThenRemove()
{
_items = ValuesGenerator.ArrayOfUniqueValues<int>(100).Select(x => ((object)x.ToString(), (object)x.ToString())).ToArray();
Expand Down Expand Up @@ -138,5 +142,39 @@ public void AddThenRemove_SlidingExpiration()
}
}
}

[Benchmark]
public void AddThenRemove_ExpirationTokens()
{
Token token = new Token();

using (MemoryCache cache = new MemoryCache(new MemoryCacheOptions()))
{
foreach (var item in _items)
{
using (ICacheEntry entry = cache.CreateEntry(item.key))
{
entry.ExpirationTokens.Add(token);
entry.Value = item.value;
}
}

foreach (var item in _items)
{
cache.Remove(item.key);
}
}
}

private sealed class Token : IChangeToken, IDisposable
{
public bool HasChanged => false;

public bool ActiveChangeCallbacks => false;

public void Dispose() { }

public IDisposable RegisterChangeCallback(Action<object> callback, object state) => this;
}
}
}