public void TestMemory() { int times = 5000000; IDuplicateRemover duplicateRemover = new BloomFilterDuplicateRemover(times, 0.005); long used = GetProcessUsedMemory(); long time = DateTime.UtcNow.CurrentTimeMillis(); for (int i = 0; i < times; i++) { duplicateRemover.IsDuplicate(new Request(i.ToString(), null), null); } Console.WriteLine("Time used by bloomfilter:" + (DateTime.UtcNow.CurrentTimeMillis() - time)); Console.WriteLine("Memory used by bloomfilter:" + (GetProcessUsedMemory() - used)); duplicateRemover = new HashSetDuplicateRemover(); GC.Collect(); used = GetProcessUsedMemory(); time = DateTime.UtcNow.CurrentTimeMillis(); for (int i = 0; i < times; i++) { duplicateRemover.IsDuplicate(new Request(i.ToString(), null), null); } Console.WriteLine("Time used by hashset:" + (DateTime.UtcNow.CurrentTimeMillis() - time)); Console.WriteLine("Memory used by hashset:" + (GetProcessUsedMemory() - used)); }
public void TestMissHit() { int times = 5000000; IDuplicateRemover duplicateRemover = new BloomFilterDuplicateRemover(times, 0.01); int right = 0; int wrong = 0; int missCheck = 0; for (int i = 0; i < times; i++) { bool duplicate = duplicateRemover.IsDuplicate(new Request(i.ToString(), null), null); if (duplicate) { wrong++; } else { right++; } duplicate = duplicateRemover.IsDuplicate(new Request(i.ToString(), null), null); if (!duplicate) { missCheck++; } } double missRate = wrong / (double)right; Assert.IsTrue(missRate < 0.01); Console.WriteLine("Right count: " + right + " Wrong count: " + wrong + " Miss check: " + missCheck); }
public void TestRemove() { BloomFilterDuplicateRemover bloomFilterDuplicateRemover = new BloomFilterDuplicateRemover(10); bool isDuplicate = bloomFilterDuplicateRemover.IsDuplicate(new Request("a", null), null); Assert.IsFalse(isDuplicate); isDuplicate = bloomFilterDuplicateRemover.IsDuplicate(new Request("a", null), null); Assert.IsTrue(isDuplicate); isDuplicate = bloomFilterDuplicateRemover.IsDuplicate(new Request("b", null), null); Assert.IsFalse(isDuplicate); isDuplicate = bloomFilterDuplicateRemover.IsDuplicate(new Request("b", null), null); Assert.IsTrue(isDuplicate); }