Skip to content

Commit 2570db6

Browse files
authored
Merge pull request #355 from DataObjects-NET/7.0-caching-issues-resolvement
Some caching collections issues resolved
2 parents b987a88 + 1828d9f commit 2570db6

File tree

3 files changed

+107
-8
lines changed

3 files changed

+107
-8
lines changed

ChangeLog/7.0.5_dev.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[main] Updated BitFaster.Caching package

Orm/Xtensive.Orm.Tests.Core/Caching/WeakestCacheTest.cs

Lines changed: 105 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ public class Item : IEquatable<Item>
2626

2727
public bool Equals(Item obj)
2828
{
29-
if (obj==null)
29+
if (obj == null)
3030
return false;
31-
return obj.Value==Value;
31+
return obj.Value == Value;
3232
}
3333

3434
public override bool Equals(object obj)
@@ -38,7 +38,7 @@ public override bool Equals(object obj)
3838

3939
public override int GetHashCode()
4040
{
41-
return (Value!=null ? Value.GetHashCode() : 0);
41+
return (Value != null ? Value.GetHashCode() : 0);
4242
}
4343

4444
public override string ToString()
@@ -54,14 +54,44 @@ public Item(string value)
5454

5555
#endregion
5656

57-
private volatile Item item1;
57+
private volatile Item fieldItem1;
58+
private volatile Item fieldItem2;
5859

5960
[Test]
60-
public void CombinedTest()
61+
public void ClassFieldInTestScopeTest()
6162
{
6263
var cache = new WeakestCache<Item, Item>(false, false, i => i);
6364

64-
item1 = new Item("1");
65+
fieldItem1 = new Item("1");
66+
67+
cache.Add(fieldItem1);
68+
69+
Assert.AreSame(fieldItem1, cache.First());
70+
Assert.AreSame(fieldItem1, cache[new Item("1"), true]);
71+
72+
cache.Remove(fieldItem1);
73+
Assert.AreEqual(0, cache.Count);
74+
75+
cache.Add(fieldItem1);
76+
TestHelper.CollectGarbage(true);
77+
cache.CollectGarbage();
78+
Assert.AreEqual(1, cache.Count);
79+
80+
fieldItem1 = null;
81+
TestHelper.CollectGarbage(true);
82+
cache.CollectGarbage();
83+
Assert.AreEqual(1, cache.Count);
84+
85+
Assert.IsNotNull(cache[new Item("1"), true]);
86+
}
87+
88+
[Test]
89+
public void LocalVarInTestScopeTest()
90+
{
91+
var cache = new WeakestCache<Item, Item>(false, false, i => i);
92+
93+
var item1 = new Item("1");
94+
6595
cache.Add(item1);
6696

6797
Assert.AreSame(item1, cache.First());
@@ -76,19 +106,87 @@ public void CombinedTest()
76106
Assert.AreEqual(1, cache.Count);
77107

78108
item1 = null;
109+
TestHelper.CollectGarbage(true);
110+
cache.CollectGarbage();
111+
Assert.AreEqual(1, cache.Count);
112+
113+
Assert.IsNotNull(cache[new Item("1"), true]);
114+
}
115+
116+
[Test]
117+
public void LocalVarInCalledMethodScopeTest()
118+
{
119+
var cache = new WeakestCache<Item, Item>(false, false, i => i);
120+
121+
InnerLocalVariableCacheTest(cache);
122+
79123
TestHelper.CollectGarbage(true);
80124
cache.CollectGarbage();
81125
Assert.AreEqual(0, cache.Count);
82126

83127
Assert.IsNull(cache[new Item("1"), true]);
84128
}
85129

130+
[Test]
131+
public void ClassFieldInCalledMethodScopeTest()
132+
{
133+
var cache = new WeakestCache<Item, Item>(false, false, i => i);
134+
135+
InnerClassFieldCacheTest(cache);
136+
137+
TestHelper.CollectGarbage(true);
138+
cache.CollectGarbage();
139+
Assert.AreEqual(0, cache.Count);
140+
141+
Assert.IsNull(cache[new Item("1"), true]);
142+
}
143+
144+
private void InnerLocalVariableCacheTest(WeakestCache<Item, Item> cache)
145+
{
146+
var item = new Item("1");
147+
148+
cache.Add(item);
149+
150+
Assert.AreSame(item, cache.First());
151+
Assert.AreSame(item, cache[new Item("1"), true]);
152+
153+
cache.Remove(item);
154+
Assert.AreEqual(0, cache.Count);
155+
156+
cache.Add(item);
157+
TestHelper.CollectGarbage(true);
158+
cache.CollectGarbage();
159+
Assert.AreEqual(1, cache.Count);
160+
161+
item = null;
162+
}
163+
164+
private void InnerClassFieldCacheTest(WeakestCache<Item, Item> cache)
165+
{
166+
fieldItem2 = new Item("1");
167+
168+
cache.Add(fieldItem2);
169+
170+
Assert.AreSame(fieldItem2, cache.First());
171+
Assert.AreSame(fieldItem2, cache[new Item("1"), true]);
172+
173+
cache.Remove(fieldItem2);
174+
Assert.AreEqual(0, cache.Count);
175+
176+
cache.Add(fieldItem2);
177+
TestHelper.CollectGarbage(true);
178+
cache.CollectGarbage();
179+
Assert.AreEqual(1, cache.Count);
180+
181+
fieldItem2 = null;
182+
}
183+
86184
[Test]
87185
public void ProfileTest()
88186
{
89187
var cache = new WeakestCache<Item, Item>(false, false, i => i);
90188
var measurement = new Measurement();
91-
for (int i = 0,j = 0; i < 1000000; i++, j++) {
189+
for (int i = 0, j = 0; i < 1000000; i++, j++) {
92190
var item = new Item(i.ToString());
93191
cache.Add(item);
94192
if (j == 100000) {

Orm/Xtensive.Orm/Xtensive.Orm.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
</ItemGroup>
4242
<ItemGroup Label="Packages">
4343
<PackageReference Include="System.Configuration.ConfigurationManager" Version="4.7.0" />
44-
<PackageReference Include="BitFaster.Caching" Version="1.0.7" />
44+
<PackageReference Include="BitFaster.Caching" Version="2.3.3" />
4545
</ItemGroup>
4646
<ItemGroup Label="T4GeneratorsUpdaters">
4747
<None Update="Arithmetic\Internal\PrimitiveArithmetics.tt">

0 commit comments

Comments
 (0)