科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道ASP.NET 2.0 中使用自定义缓存依赖

ASP.NET 2.0 中使用自定义缓存依赖

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

   在 ASP.NET 1.x 中,我们可以使用 CacheDependency 来实现缓存依赖策略,但由于这个类是 sealed 的,我们无法继承这个类来实现我们自己的策略。但是到了 ASP.NET 2.0。

作者:中国IT实验室 来源:中国IT实验室 2007年10月1日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

  

  二、页面设计
  
  下面是页面代码(有删节),其中显示了 BlogCacheDependency 的使用方法:
  
   1<script runat="server">
   2 protected void Page_Load(object sender, EventArgs e)
   3 {
   4 string feed = "http://www.cnblogs.com/RSS.aspx";
   5 if (Cache[feed] == null)
   6 {
   7 BlogCacheDependency bcd = new BlogCacheDependency(feed, 600);
   8 Cache.Insert(feed, bcd.RSS, bcd);
   9 Label1.Text = "当前数据为刚刚获取,并已更新入缓存!";
  10 }
  11 else
  12 {
  13 Label1.Text = "当前数据系从缓存中取得!";
  14 }
  15 RssXml.XPathNavigator = Cache[feed] as System.Xml.XPath.XPathNavigator;
  16 RssXml.TransformSource = "translate.xsl";
  17 }
  18</script>
  19
  20<body>
  21 <form id="form1" runat="server">
  22 博客园最新贴子:
  23 <br />
  24 <asp:Xml ID="RssXml" runat="server" />
  25 <br />
  26 <asp:Label ID="Label1" runat="server" ForeColor="red" />
  27 </form>
  28</body>
  29
  本例中设定的访问博客园首页最新贴子列表,时间间隔为600秒,即每10分钟检查一次更新情况。
  
  几个值得注意的地方:
  
  1、注意使用的 RssXml.XPathNavigator 属性,有人可能奇怪为什么不用 RssXml.Document 呢?实际上 Document 属性在 .NET 2.0 中已废除,推荐用来替代的是 XPathNavigator 属性,从前面的 BlogCacheDependency 类中可以看到,它是来源于 XPathDocument.CreateNavigator() 所创建的,从 MSDN 我们可以知道,XPathDocument 类提供一种只读的快速缓存,显然就这个例子而言确实更加适合。
  
  2、考虑一下,BlogCacheDependency 类中的 DependencyDispose 方法作何用?它与 Dispose 方法有何区别?让我们想一想,如果说某一次检查更新时,已经发现依赖变化了,但是却一直没有再次发送请求,那么这时会不会始终连续不断按间隔地执行 CheckDependencyCallback 方法呢?如果真的如此的话,那岂不是完全多余,因为只要查到一次有变化就不必再查了嘛。而如果我们进行跟踪或是记录日志的话可以发现,实际上只要查到依赖变化以后就不会再次 Check 了。奥妙在哪里?想一想就能知道 NotifyDependencyChanged 方法大有玄机,而且之所以会有 DependencyDispose 方法的原因其实也就在这里。其中的设计思想,值得我们细细品味吧。
  
  三、页面使用到的 translate.xsl
  
  不再多说,贴出主要代码:
  
   1<xsl:template match="channel">
   2 <div>
   3 <xsl:for-each select="item">
   4 <a>
   5 <xsl:attribute name="href">
   6 <xsl:value-of select="link"/>
   7 </xsl:attribute>
   8 <xsl:value-of select="title"/>
   9 </a>
  10 <br />
  11 </xsl:for-each>
  12 </div>
  13</xsl:template>
  四、执行情况
  
  这是最初执行的截图:
  
  
  当博客园首页没有出现新贴子的时候,我们刷新页面,总是可以得到如下的页面:
  
  
  
  而一旦有了新贴子,那么刷新的时候出现的是上一张图。
  
  五、你想再高级一点吗?
  
  如果你和我一样懒或是比我更懒,那么你可以考虑再用 javascript 写一个自动刷新页面的小功能,再把页面美工一下,或是包装成一个可复用的组件用在你的网站上,又或者只是想在本机里做一个“我最关注的内容集”之类的东西?嗯,想来效果会比较不错的哦。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件