Skip to content

Commit e108989

Browse files
committed
Use .NET Memory Caching
1 parent 929d0cb commit e108989

File tree

5 files changed

+10
-55
lines changed

5 files changed

+10
-55
lines changed

ArchUnitNET/ArchUnitNET.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
<PackageReference Include="Mono.Cecil" Version="0.11.6" />
2323
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
2424
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
25+
<PackageReference Include="System.Runtime.Caching" Version="4.5.0" />
2526
</ItemGroup>
2627
<ItemGroup>
2728
<None Include="../README.md" Pack="true" PackagePath="" />
Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,23 @@
1-
using System.Collections.Concurrent;
1+
using System.Runtime.Caching;
22

33
namespace ArchUnitNET.Domain
44
{
55
public class ArchitectureCache
66
{
7-
protected readonly ConcurrentDictionary<ArchitectureCacheKey, Architecture> Cache =
8-
new ConcurrentDictionary<ArchitectureCacheKey, Architecture>();
7+
protected readonly MemoryCache _cache = MemoryCache.Default;
98

109
protected ArchitectureCache() { }
1110

1211
public static ArchitectureCache Instance { get; } = new ArchitectureCache();
1312

1413
public Architecture TryGetArchitecture(ArchitectureCacheKey architectureCacheKey)
1514
{
16-
return Cache.TryGetValue(architectureCacheKey, out var matchArchitecture)
17-
? matchArchitecture
18-
: null;
15+
return _cache.Get(architectureCacheKey.ToString()) as Architecture;
1916
}
2017

21-
public bool Add(ArchitectureCacheKey architectureCacheKey, Architecture architecture)
18+
public void Add(ArchitectureCacheKey architectureCacheKey, Architecture architecture)
2219
{
23-
return Cache.TryAdd(architectureCacheKey, architecture);
20+
_cache.Add(architectureCacheKey.ToString(), architecture, new CacheItemPolicy());
2421
}
25-
26-
public void Clear() => Cache.Clear();
2722
}
2823
}

ArchUnitNET/Domain/ArchitectureCacheKey.cs

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,48 +5,19 @@
55

66
namespace ArchUnitNET.Domain
77
{
8-
public class ArchitectureCacheKey : IEquatable<ArchitectureCacheKey>
8+
public class ArchitectureCacheKey
99
{
1010
private readonly SortedSet<(string moduleName, string filter)> _architectureCacheKey =
1111
new SortedSet<(string moduleName, string filter)>(new ArchitectureCacheKeyComparer());
1212

13-
public bool Equals(ArchitectureCacheKey other)
14-
{
15-
return other != null
16-
&& _architectureCacheKey.SequenceEqual(other._architectureCacheKey);
17-
}
18-
1913
public void Add(string moduleName, string filter)
2014
{
2115
_architectureCacheKey.Add((moduleName, filter));
2216
}
2317

24-
public override bool Equals(object obj)
25-
{
26-
if (ReferenceEquals(null, obj))
27-
{
28-
return false;
29-
}
30-
31-
if (ReferenceEquals(this, obj))
32-
{
33-
return true;
34-
}
35-
36-
return obj.GetType() == GetType() && Equals((ArchitectureCacheKey)obj);
37-
}
38-
39-
public override int GetHashCode()
18+
public override string ToString()
4019
{
41-
unchecked
42-
{
43-
var hashCode = 397;
44-
_architectureCacheKey.ForEach(tuple =>
45-
{
46-
hashCode = (hashCode * 131) ^ tuple.GetHashCode();
47-
});
48-
return hashCode;
49-
}
20+
return string.Join(",", _architectureCacheKey);
5021
}
5122
}
5223

ArchUnitNETTests/Domain/ArchitectureCacheTests.cs

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,5 @@ public void GetExistingArchitecture()
4444
_testEmptyArchitecture
4545
);
4646
}
47-
48-
[Fact]
49-
public void CacheClear()
50-
{
51-
_testArchitectureCache.Add(_testArchitectureCacheKey, _testEmptyArchitecture);
52-
Assert.Equal(
53-
_testArchitectureCache.TryGetArchitecture(_testArchitectureCacheKey),
54-
_testEmptyArchitecture
55-
);
56-
_testArchitectureCache.Clear();
57-
Assert.Null(_testArchitectureCache.TryGetArchitecture(_testArchitectureCacheKey));
58-
}
5947
}
6048
}

ArchUnitNETTests/Domain/TestArchitectureCache.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ public class TestArchitectureCache : ArchitectureCache
66
{
77
public int Size()
88
{
9-
return Cache.Count;
9+
return (int)_cache.GetCount();
1010
}
1111
}
1212
}

0 commit comments

Comments
 (0)