• 自定义缓存类扩展类


    using System;
    using System.Runtime.Caching;
    
    namespace MemoryCacheHelpSpace
    {
        public static class MemoryCacheHelp
        {
            private static Object m_objLocker = new object();
    
            public static T GetCacheItem<T>(String strKey,
                Func<T> cachePopulate,
                TimeSpan? slidingExpiration = null,
                DateTime? absoluteExpiration = null)
            {
                if (string.IsNullOrWhiteSpace(strKey)) throw new ArgumentException("无效键");
                if (cachePopulate == null) throw new ArgumentException("委托不能为null");
                if (slidingExpiration == null && absoluteExpiration == null) throw new ArgumentException("间隔或时间至少有一个");
                if (MemoryCache.Default[strKey] == null)
                {
                    lock (m_objLocker)
                    {
                        var item = new CacheItem(strKey, cachePopulate());
                        var policy = CreatePolicy(slidingExpiration, absoluteExpiration);
                        MemoryCache.Default.Add(item, policy);
                    }
                }
                return (T)MemoryCache.Default[strKey];
            }
    
            public static void CacheRemove(string strKey)
            {
                if (string.IsNullOrWhiteSpace(strKey)) throw new ArgumentException("无效键");
                if (MemoryCache.Default[strKey] != null)
                {
                    lock (m_objLocker)
                    {
                        MemoryCache.Default.Remove(strKey);
                    }
                }
            }
    
            private static CacheItemPolicy CreatePolicy(TimeSpan? slidingExpiration, DateTime? absoluteExpiration)
            {
                var policy = new CacheItemPolicy();
                if (absoluteExpiration.HasValue)
                {
                    policy.AbsoluteExpiration = absoluteExpiration.Value;
                }
                else if (slidingExpiration.HasValue)
                {
                    policy.SlidingExpiration = slidingExpiration.Value;
                }
                policy.Priority = CacheItemPriority.Default;
                return policy;
            }
        }
    }
  • 相关阅读:
    BFPRT算法O(n)解决第k小的数
    Manacher练习
    KMP全家桶练习
    Codeforces Round #552 (Div. 3)
    Manacher's Algorithm
    poj 2559 (单调栈)
    单调队列
    单调栈
    multiset用法
    poj3660 Cow Contest(Floyd-Warshall方法求有向图的传递闭包)
  • 原文地址:https://www.cnblogs.com/itsone/p/13304338.html
Copyright © 2020-2023  润新知