1. 程式人生 > 實用技巧 >自定義快取類擴充套件類

自定義快取類擴充套件類

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; } } }