-
Notifications
You must be signed in to change notification settings - Fork 43
Open
Description
Perhaps I'm missing some configuration options, but I would have expected Bloom filter to have static memory usage:
[MemoryDiagnoser]
public class Benchmark
{
private static readonly int items = 30_000_000;
[Benchmark]
public void BloomFilter()
{
var bf = FilterBuilder.Build(1000, 0.01);
for (var i = 0; i < items; i++)
{
bf.Add($"property_{i}_name");
}
for (var i = 0; i < items; i++)
{
if (!bf.Contains($"property_{i}_name"))
{
Console.WriteLine($"False negative {i}");
}
}
}
[Benchmark]
public void Dictionary()
{
var bf = new Dictionary<string, bool>();
for (var i = 0; i < items; i++)
{
bf.Add($"property_{i}_name", true);
}
for (var i = 0; i < items; i++)
{
if (!bf.ContainsKey($"property_{i}_name"))
{
Console.WriteLine($"False negative {i}");
}
}
}
}BenchmarkDotNet v0.13.7, macOS Big Sur 11.6.5 (20G527) [Darwin 20.6.0]
Intel Core i5-1038NG7 CPU 2.00GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK 6.0.202
[Host] : .NET 6.0.4 (6.0.422.16404), X64 RyuJIT AVX2
DefaultJob : .NET 6.0.4 (6.0.422.16404), X64 RyuJIT AVX2
| Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
|------------ |---------:|---------:|---------:|-------------:|------------:|-----------:|----------:|
| BloomFilter | 9.538 s | 0.0471 s | 0.0440 s | 3774000.0000 | - | - | 11.03 GB |
| Dictionary | 17.162 s | 0.2386 s | 0.1993 s | 1008000.0000 | 131000.0000 | 11000.0000 | 6.37 GB |
// * Hints *
Outliers
Benchmark.Dictionary: Default -> 2 outliers were removed (17.85 s, 18.53 s)
Tested with various different options, and Dictionary uses consistently less memory
Metadata
Metadata
Assignees
Labels
No labels