给定单例缓存模式的缺点

本文关键字:缺点 模式 缓存 单例 | 更新日期: 2023-09-27 18:02:46

我使用给定的单例模式来缓存ASP.NET中的类对象。有人能指出这种方法的缺点吗?

public class CacheManager
{
private static CacheManager _instance;
protected CacheManager(string key) { id = key; }
public static CacheManager getInstance(string key)
{
   if (HttpContext.Current.Cache[key] == null)
       HttpContext.Current.Cache.Insert(key, _instance = new CacheManger(key), null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(120),CacheItemPriority.Default,new CacheItemRemovedCallback(ReportRemovedCallback));
   return (CacheManager)HttpContext.Current.Cache[key];
}
private static void ReportRemovedCallback(string CacheManager, object value, CacheItemRemovedReason reason)
{            
    _instance = null;
}
public string id { get; private set; }        
public string field1 { get; set; }
public string field2 { get; set; }
public string field3 { get; set; }        
}

给定单例缓存模式的缺点

我看不出你有什么理由把它变成单例。我只会为获取/设置值的每个属性编写一个包装器。这样你就可以更容易地用IoC容器注入它,并增加可测试性。

现在,你的代码不是线程安全的,这也可能导致问题。