cache load在构造函数中调用方法来设置计时器,这是不好的方法?

时间:2015-03-10 04:19:57

标签: c# class caching constructor

  

在一个c#项目中,我在构造函数中调用了一个缓存加载方法来设置一个计时器是不是一个坏主意?

      public MyConstructor()
            {
                cacheDataManager = new MemoryCacheManager();

                var timer = new System.Threading.Timer(
                           e => LoadMyCacheData(),
                          null,
                          TimeSpan.Zero,
                         TimeSpan.FromSeconds(30));
            }

//cache data method LoadMyCacheData

请建议谢谢:)

1 个答案:

答案 0 :(得分:2)

你有2个错误。 1-如果在公共构造函数中初始化缓存,则在从缓存加载的类中创建新实例时。要解决此问题,您必须创建静态构造函数

static MyConstructor()
            {
                cacheDataManager = new MemoryCacheManager();

                var timer = new System.Threading.Timer(
                           e => LoadMyCacheData(),
                          null,
                          TimeSpan.Zero,
                         TimeSpan.FromSeconds(30));
            }
解决方案缓存中的

2-是一个类级别,这个概念是远程缓存概念

 public class MyConstructor
    {
        public void Do()
        {
            MemoryCacheManager.Instance.myObject.ToString();
        }
    }

    public class MemoryCacheManager
    {
        private MemoryCacheManager()
        {
            myObject = new object();
        }

        private static MemoryCacheManager _cacheManager;

        public static MemoryCacheManager Instance
        {
            get
            {
                if(_cacheManager==null)
                    _cacheManager=new MemoryCacheManager();
                return _cacheManager;
            }
        }

        public object myObject { get; private set; }

    }

要解决此问题并转移到项目中的缓存级别,您必须使用单例模式 但更好的企业应用程序解决方案使用缓存服务器,如Ncache或appfabric