您的位置:首页技术开发.Net 专栏 → .Net PetShop 4.0的缓存处理

.Net PetShop 4.0的缓存处理

时间:2010/2/14 18:49:00来源:本站整理作者:我要评论(0)

.Net PetShop 4.0的缓存处理:

  在访问量非常大,但更新较少的网站中使用缓存,可以大大提高程序运行的效率,给网络用户一个良好的体验效果。在Microsoft提供的经典示例项目.Net PetShop 4.0中,也提供了对缓存的支持,本文是作者在学习此项目时的一些心得体会,有一些地方还不十分清楚,希望能够抛砖引玉。

  在.Net PetShop 4.0中,非常成功地使用了工厂模式以及接口(interface)、静态类(Static class)、抽象类(abstract class)等成员。在使用缓存时,也是通过web.config配置进行设置,在使用时非常灵活。下面从底向上具体分析.Net PetShop 4.0缓存方面的技术。

  首先看一下该项目中与缓存直接相关的命名空间:

PetShop.ICacheDependency
PetShop.TableCacheDependency
PetShop.CacheDependencyFactory
PetShop.Web

  一、PetShop.ICacheDependency命名空间

  最低层应该是接口的定义了,在PetShop.ICacheDependency命名空间中只定义了一个接口IPetShopCacheDependency,该接口只有一个方法 GetDependency,没有任何参数,返回AggregateCacheDependency类型。AggregateCacheDependency是在.NET Framework 2.0 版中是新增的类,组合 ASP.NET 应用程序的 Cache 对象中存储的项和 CacheDependency 对象的数组之间的多个依赖项(MSDN中原话)。

  二、PetShop.TableCacheDependency命名空间

  在PetShop.TableCacheDependency命名空间中,提供两种类:抽象类TableDependency和它的继承类Category、Item和Product。抽象类TableDependency的构造函数为:

protectedTableDependency(stringconfigKey){
  stringdbName=ConfigurationManager.AppSettings["CacheDatabaseName"];
  stringtableConfig=ConfigurationManager.AppSettings[configKey];
  string[]tables=tableConfig.Split(configurationSeparator);
  foreach(stringtableNameintables)
    dependency.Add(newSqlCacheDependency(dbName,tableName));
}

  传递了一个参数configKey,根据该参数从web.config文件中获取表名列表,同时在web.config中获取数据库名称。将表名列表中的所有数据表添加到AggregateCacheDependency类型的dependency变量中。在此外使用了.NET Framework 2.0 版中是新增的另一个与缓存有关的SqlCacheDependency类。这个类用于建立ASP.NET应用程序的Cache对象中存储的项和特定SQL Server数据库表之间的联系。AggregateCacheDependency和SqlCacheDependency都从CacheDependency继承而来,但在.NET 2.0中还未提供Oracle等其它数据库对应的类。

  下面是web.config文件中与缓存相关的设置:

<!--Cachedependencyoptions.Possiblevalues:PetShop.TableCacheDependencyforSQLServerandkeepemptyforORACLE-->
<addkey="CacheDependencyAssembly"value="PetShop.TableCacheDependency"/>
<!--CacheDatabaseNameshouldmatchthenameundercachingsection,whenusingTableCacheDependency-->
<addkey="CacheDatabaseName"value="MSPetShop4"/>
<!--*TableDependencyliststabledependencyforeachinstanceseparatedbycomma-->
<addkey="CategoryTableDependency"value="Category"/>
<addkey="ProductTableDependency"value="Product,Category"/>
<addkey="ItemTableDependency"value="Product,Category,Item"/>

  每个继承类都只有一个构造函数,通过设置基类的configKey参数变成了三个不同的类。Product类的构造函数为:

publicProduct():base("ProductTableDependency"){}

相关视频

    没有数据

相关阅读 vs.netIDE报"以下文件中的行尾不一致,要将行尾标准化吗?"的解决ie6下面asp.net mvc3 部署应用程序.NET 3.5 安装错误的四个原因及解决方法支持无限制历史记录的Paint.NET 3.5.8 Final,你用了吗?.NET Framework环境安装错误怎么办?JVM和.NET CLR和哪个会被彻底击败在asp.net mvc中实现右键菜单和简单的分页教程VB.NET如何得到调用当前过程的方法名称和类名称

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 什么是.NET中的TDD?ASP.NET AJAX入门简介 WebMatrix入门教程VC++2008中如何调用GetOpenFileName打开文件PlaySound函数在VC++6.0中如何播放音乐及声请问VC++回调函数怎么用

人气排行 嵌入式实时操作系统VxWorks入门教程ArrayList 与 string、string[] 的转换C#遍历整个文件夹及子目录的文件代码WebMatrix入门教程asp.net判断文件或文件夹是否存在c#判断数据NULL值的方法vc++6.0怎么写Windows简单窗口代码.net解决数据导出excel时的格式问题