ASP.NET 2.0 中的SqlCacheDependency特性

时间:2010-03-06 20:03:14  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:是如果页面内容是从数据库中取出,那么就可以省去连接数据库、取数据的步骤,这个好处可大了。       PageCache有点小小的问题,比如,很多ASP.NET论坛的首页就用了PageCache,所以在一个版里面贴出的最新的帖子并不会马上反映到首页上,而是需要等上一段时间。虽然有点无可奈何,但在某些场合(比如易趣用来显示物品拍卖状态的页面),这种延迟是不允许...
  正文:ASP/ target=_blank class=infotextkey>asp.NET中的Page Cache是个很有用的东东,只要简单的在页面上方加上一个OutputCache标签,就可以让页面在制定的Duration内直接把自动保存在缓存中的页面内容输出,而不需要让ASP.NET引擎再次执行页面代码,当然,节省这点执行时间并不是最主要的理由,主要理由是如果页面内容是从数据库中取出,那么就可以省去连接数据库、取数据的步骤,这个好处可大了。
  
   PageCache有点小小的问题,比如,很多ASP.NET论坛的首页就用了PageCache,所以在一个版里面贴出的最新的帖子并不会马上反映到首页上,而是需要等上一段时间。虽然有点无可奈何,但在某些场合(比如易趣用来显示物品拍卖状态的页面),这种延迟是不允许的。
  
   也即是说,ASP.NET里面的Cache并不能自动根据数据库中相应数据发生了变化,而使相应的Cache过期,ASP.NET 2.0中新增的SqlCacheDependency特性使这成为了可能。(当然,只要我们明白了ASP.NET 2.0中的大致实现方式,我们可以基于ASP.NET 1.0把这个特点实现出来,后面我总结了相应的方法。)
  
   要在ASP.NET 2.0中应用SqlCacheDependency特性,步骤如下(基于大家手里的Whidbey PDC版本):
  
   1、 使数据库支持SqlCacheDependency
   在.Net Framework 1.2的安装目录下(通常是WINDOWSMicrosoft.NETFrameworkv1.2.30703),有一个aspnet_regsqlcache.exe,这个命令行工具让我们的SqlServer 7.0或者SqlServer 2000能支持SqlCacheDependency特性,
  
   首先:“aspnet_regsqlcache –S 服务器名称 –U 登陆ID –P 密码 –d 数据库名称 –ed”,这个命令使指定数据库支持SqlCacheDependency,
  
   然后我们再加入要追踪的数据表:“aspnet_regsqlcache –S 服务器名称 –U 登陆ID –P 密码 –d 数据库名称 –t 要追踪的数据表的名称 –et”,这个命令使指定的Table支持SqlCacheDependency。
  
   它在幕后做了什么事情呢?
  
   首先,它在指定的数据库中新建了一个Table,叫做“AspNet_SqlCacheTablesForChangeNotification”,这个表有三个字段,“tableName”记录要追踪的数据表的名称,“notificationCreated”记录开始追踪的时间,“changeId”是一个int类型的字段,每当追踪的数据表的数据发生变化时,这个字段的值就加1。
  
   它还会在指定的数据库中增加几个存储过程,用来让ASP.NET引擎查询追踪的数据表的情况。
  
   然后,它会给我们要追踪的Table加上几个Trigger,分别对应到Insert、Update、Delete操作,这几个Trigger的语句非常简单,就是把“AspNet_SqlCacheTablesForChangeNotification”表中对应“tableName”字段为这个追踪的表的名称的记录的“changeId”字段加上一个1。
  
   ASP.NET引擎通过执行它加上的存储过程“AspNet_SqlCachePollingStoredProcedure”,这个存储过程直接返回“AspNet_SqlCacheTablesForChangeNotification”表的内容,让ASP.NET引擎知道哪个表的数据发生的变化。默认每500毫秒执行这个存储过程一次,不过可以在web.config里面修改这个间隔时间,我的经验是这个查询操作也是很耗资源的,呵呵。
  
   2、 web.config配置
  
   在web.config里面的配置再简单不过了
  
  
   <configuration>
  
   <!-- 加上合适的数据库连接字符串 -->
  
   <connectionStrings>
  
   <add name="SqlServerConnectionString"
  
   connectionString="server=sqlserver1;uid=sa;pwd=
  
   password;database=PortalDB " />
  
   </connectionStrings>
  
   <system.web>
  
   <!-- 配置Cache一段,使之支持SqlCacheDependency -->
  
   <cache>
  
   <sqlCacheDependency enabled="true" pollTime="500">
  
   <databases>
  
   <add name=" PortalDB "
  
   connectionStringName=" SqlServerConnectionString " />

ASP.NET 2.0 中的SqlCacheDependency特性》由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/13083.html


关键字:

关于《ASP.NET 2.0 中的SqlCacheDependency特性》文章的评论

站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td