读书人

【【在实战应用中小弟我该选择哪种缓

发布时间: 2012-01-30 21:15:58 作者: rapoo

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


他的:
只把上面类生成类库DLL 修改
assemblyPath 为 engine.dll的路径
className 为 engine项目中的一个类
cacheKey 为 cache键值
三个值即可
而这三个值可从配置文件中获得,也就说,他根本不修改任何程序就可以运行
这种程序称为 "松耦合结构 ",为了更方便地扩展



[解决办法]
我只能向你学习...

读书人网 >C#

热点推荐