示例#1
0
        private static void ScanForExpiredEntries(MemoryCache cache)
        {
            DateTime utcNow = DateTime.UtcNow;

            foreach (var cachePair in cache._cacheEntries)
            {
                object     key        = cachePair.Key;
                CacheEntry cacheEntry = cachePair.Value;

                if (cacheEntry.CheckIfExpired(utcNow))
                {
                    if (cache._cacheEntries.Remove(key, cacheEntry))
                    {
                        cache.RemoveFromAllTagEntries(cacheEntry);
                    }
                }
            }

            foreach (var tagPair in cache._tagEntries)
            {
                object   tag      = tagPair.Key;
                TagEntry tagEntry = tagPair.Value;

                if (tagEntry.IsEmpty)
                {
                    if (cache._tagEntries.Remove(tag, tagEntry))
                    {
                        tagEntry.MarkAsRemoved();

                        cache.RemoveLinkedCacheEntries(tagEntry);
                    }
                }
            }

            Volatile.Write(ref cache._cleanupIsRunning, 0);
        }