BitFaster.Caching
BitFaster.Caching copied to clipboard
Drain threads for memory cache hit rate analysis
trafficstars
MemoryCache enqueues cache maintenance to the thread pool asynchronously. This leads to non-deterministic results in the hit rate tests, depending on whether cache maintenance has run.
ConcurrentLfu tests are run with a foreground scheduler (no background maintenance) to avoid this problem.
To make the tests fair, wait for all thread pool tasks to complete each time there is a MemoryCache read. This achieves stable results with a small penalty.
Result with fix:
Result before fix:
Thread.Sleep(1) increases the test runtime for glimpse from 0.31 secs to about 15 secs - i.e. 4700% slower. Repeated Thread.Sleep(0) is only about 25% slower.