【【在实战应用中,我该选择哪种缓存解决方案。】】【100】
在项目中,为了提高系统的运行效率,我用到了缓存技术。下面是两种不同的写法,第一个是某大型项目中用的,另外一个是我现在准备用的。据说是第一个好,那么我不明白,它好在哪里?请指点。 
 public   interface   IDataProviderBase 
 { 
                ..... 
 }   
 public   class   SqlDataProvider   :   IDataProviderBase 
 { 
                ..... 
 }   
 assemblyPath   为   engine.dll的路径 
 className            为   engine项目中的一个类 
 cacheKey               为   cache键值     
 方法一: 
 if(cache不存在) 
             cache.Insert 
             (cacheKey, 
             Assembly.LoadFrom(   assemblyPath).GetType(   className   ).GetConstructor(new   Type[0]),    
             new   CacheDependency(   assemblyPath   )   );    
 else 
             读取cache 
    return   (IDataProviderBase)(      ((ConstructorInfo)cache[cacheKey]).Invoke(null)   );   
 方法二 
 if(cache不存在) 
          IDataProviderBase   pr   =   new   Data.SqlDataProvider(); 
          cache.Insert(cacheKey,   pr   ,   new   CacheDependency(   assemblyPath   )   );    
 else 
             读取cache 
 return   (IDataProviderBase)(cache[cacheKey]);
------解决方案--------------------光这样是看不出那个更好的。 
 我以前使用的,貌似第一个。
------解决方案--------------------第一个使用反射灵活,你的效率比他的高,但是不够灵活。
------解决方案--------------------if(cache不存在) 
     cache.Insert 
     (cacheKey, 
     Assembly.LoadFrom( assemblyPath).GetType( className ).GetConstructor(new Type[0]),  
     new CacheDependency( assemblyPath ) );  
 else 
     读取cache 
  return (IDataProviderBase)(  ((ConstructorInfo)cache[cacheKey]).Invoke(null) ); 
 --------------------------------------------- 
 这个主要是 扩展性上考虑的,松耦合结构LoadFrom是加载程序集   
 而你的 只能做小型项目,
------解决方案--------------------顶
------解决方案--------------------IDataProviderBase pr = new Data.SqlDataProvider(); 
 这句话就决定了你的这个只适用于你自己。如果别的对象要用的话,你就得在new出来一个pr,这样做程序的可扩展性降低了,(也许这样做效率会高一些)第一种方法用了反射,这样模块独立性好,应为不牵扯到别的类。它和别的类或者模块的耦合度底了。把这个类或者模块拿到别的类或者模块中不用修改就可以使用了。
------解决方案--------------------感觉是个工厂方法,不算缓存吧。
------解决方案--------------------第一种灵活,但是效率不但好   
 第二种效率好,不灵活..   
 一般情况下都会选择第一种.
------解决方案--------------------顶起来吧……
------解决方案--------------------学习,帮顶一下。好深奥阿
------解决方案--------------------这个主要是 扩展性上考虑的,松耦合结构LoadFrom是加载程序集 
 ======================================================== 
 能具体点吗? 
 ---------------------- 
 public interface IDataProviderBase 
 { 
      ..... 
 }   
 public class SqlDataProvider : IDataProviderBase 
 { 
      ..... 
 }    
 LoadFrom是加载程序集 
 现在假设我要缓存另外一个类 
 public class SqlDataProvider111 : IDataProviderBase 
 { 
      ..... 
 } 
 你的程序需要改动...