【【在实战应用中,我该选择哪种缓存解决方案。】】【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
{
.....
}
你的程序需要改动...