本帖最后由 henry3695 于 2010-01-03 15:16:56 编辑

解决方案 »

  1.   

    1. 在cache中的内容不保证始终有效,在内存紧张等情况下系统会自动释放cache中的内容
    2. 第二种方法称不上是单例模式,因为m_dt是实例变量,每一个类实例都有一份m_dt,把它改成static
      

  2.   


    第二种方法,我是定义了这么一个类,这个类能且只能被new一个实例的
      

  3.   

    从你写的两个来看,相对来说第一种比较好。你写的第二种不能说是单例模型,即使你说“这个类能且只能被new一个实例的”。在单例模型中增加lock锁,处理并发。将第二种修改下使用第二种比较好.
      

  4.   

    其实2种都不好。1.缓存其实是很少的。如果你要保存很多东西,不要用Cache。2.应该写成 private static DataTable m_dt;。但问题也很明显,静态变量也是用堆栈的,空间也不是很多,如果数据大也不建议这样用。而且最重要问题是,静态变量是永远存在的,你不知道什么时候更新数据,所以如果真的要使用,应该加个看门狗之类的程序定时去检查数据有没有更新,有的话就清空。个人建议,如果数据量大应该用memcache;数据量少,可以用static 。
      

  5.   


    //这是微软提供的单例代码
     
    using System; 
    public sealed class Singleton 

       private static volatile Singleton instance; 
       private static object syncRoot = new Object(); 
       private Singleton() {} 
       public static Singleton Instance 
       { 
          get  
          { 
             if (instance == null)  
             { 
                lock (syncRoot)  
                { 
                   if (instance == null)  
                      instance = new Singleton(); 
                } 
             } 
             return instance; 
          } 
       } 
    }  
      

  6.   

    貌似一个用的是局部变量,一个用的是全局变量,就这点差别啊。还有别的么?逻辑是一样一样的啊。并发问题?什么并发问题?两个都是实例有什么并发问题?如果说的是Cache,在MSDN里面有句话:This type is thread safe.