Skip to content

Commit 0588062

Browse files
authored
Fix HitRateAnalysis test suite OOM (#460)
1 parent 0bc75e9 commit 0588062

File tree

1 file changed

+40
-5
lines changed
  • BitFaster.Caching.HitRateAnalysis/Arc

1 file changed

+40
-5
lines changed

BitFaster.Caching.HitRateAnalysis/Arc/Runner.cs

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,25 @@ public Runner(RunnerConfig config)
1616
this.config = config;
1717
}
1818

19-
public async Task Run()
19+
public async Task Run()
2020
{
2121
await this.config.File.DownloadIfNotExistsAsync();
2222

2323
Console.WriteLine("Running...");
24-
int count = 0;
24+
2525
var sw = Stopwatch.StartNew();
2626

27+
int count = this.config.Analysis.First().CacheSize >= 1_000_000 ? AnalyzeLarge() : AnalyzeSmall();
28+
29+
Console.WriteLine($"Tested {count} keys in {sw.Elapsed}");
30+
31+
this.config.Analysis.WriteToConsole();
32+
Analysis<long>.WriteToFile(this.config.Name, this.config.Analysis);
33+
}
34+
35+
private int AnalyzeSmall()
36+
{
37+
int count = 0;
2738
foreach (var key in this.config.File.EnumerateFileData())
2839
{
2940
foreach (var a in this.config.Analysis)
@@ -37,10 +48,34 @@ public async Task Run()
3748
}
3849
}
3950

40-
Console.WriteLine($"Tested {count} keys in {sw.Elapsed}");
51+
return count;
52+
}
4153

42-
this.config.Analysis.WriteToConsole();
43-
Analysis<long>.WriteToFile(this.config.Name, this.config.Analysis);
54+
// for very large cache sizes do multiple passes of the data,
55+
// else not everything can fit in memory.
56+
private int AnalyzeLarge()
57+
{
58+
int count = 0;
59+
60+
foreach (var a in this.config.Analysis)
61+
{
62+
Console.WriteLine($"Analyzing cache size {a.CacheSize}");
63+
64+
foreach (var key in this.config.File.EnumerateFileData())
65+
{
66+
a.TestKey(key);
67+
68+
if (++count % 100000 == 0)
69+
{
70+
Console.WriteLine($"Processed {count} keys...");
71+
GC.Collect();
72+
}
73+
}
74+
75+
GC.Collect(2, GCCollectionMode.Forced, true);
76+
}
77+
78+
return count;
4479
}
4580
}
4681
}

0 commit comments

Comments
 (0)