⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datacaching.aspx

📁 书籍教程 >> .Net教程 >> asp.net编程精彩百例
💻 ASPX
字号:
<%@ Register TagPrefix="Acme" Namespace="Acme" Assembly="QSTools" %>
<%@ Register TagPrefix="Acme" TagName="SourceRef" Src="/quickstart/aspplus/util/SrcRef.ascx"%>

<!-- #include virtual="/quickstart/aspplus/include/header.inc" -->

<h4>页数据缓存</h4>

<div class="indent" style="font-family:Verdana; font-size:8pt;">
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#intro">数据缓存介绍</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#samples">使用数据缓存</a><br>
    <b> <img align="middle" src="/quickstart/images/bullet.gif">&nbsp;&nbsp;</b><a class="toc2" href="#summary">本节小结</a><br>
</div>
<p>
<hr>

<a name="intro"><span class="subhead">数据缓存介绍</span>
<p>

ASP.NET 提供一个功能完整的缓存引擎,页面可使用该引擎通过 HTTP 请求存储和检索任意对象。ASP.NET 缓存对于每个应用程序是私有的并且将对象存储在内存中。缓存的生存期与应用程序的生存期相同,也就是说,当应用程序重新启动时,将重新创建缓存。
<p>
缓存提供了简单的词典接口,使程序员可以轻松地将对象放到缓存中以及从缓存中检索对象。在最简单的情况下,将某项放到缓存中就像向词典中添加一个词条一样:
<p><Acme:TabControl runat="server">
<Tab Name="C#">
Cache["mykey"] = myValue;
</Tab>

<Tab Name="VB">
Cache("mykey") = myValue
</Tab>

<Tab Name="JScript">
Cache("mykey") = myValue;
</Tab>

</Acme:TabControl><p>

检索数据就是如此简单:
<p><Acme:TabControl runat="server">
<Tab Name="C#">
myValue = Cache["mykey"];
if(myValue != null ) {
    DisplayData(myValue);
}
</Tab>

<Tab Name="VB">
myValue = Cache("mykey")
If myValue <> Null Then
    DisplayData(myValue)
End If
</Tab>

<Tab Name="JScript">
myValue = Cache("mykey");
if(myValue != null ) {
    DisplayData(myValue);
}
</Tab>

</Acme:TabControl><p>

对于需要更复杂功能的应用程序,ASP.NET 缓存支持清理、过期、文件依赖项和键依赖项。
<p>
<ul>
<li>清理是指当内存变得很少时,缓存尝试移除不常使用和不太重要的项。希望控制清理如何发生的程序员可以在项插入到缓存时为清理程序提供提示,指出创建项的相对成本和使项保持有用而必须具有的相对访问率。
<p>
<li>过期使程序员得以提供缓存项的生存期,其时间既可以是确切时间(例如,6:00 过期),也可以是相对于项的上次使用的时间(例如,上次访问项后 20 分钟过期)。项过期后将从缓存中被移除,以后若试图检索它,将返回空值,除非将它重新插入缓存。
<p>
<li>文件和键依赖项允许缓存项的有效性基于外部文件或其他缓存项。如果依赖项改变,则缓存项失效并从缓存中被移除。有关如何使用此功能的示例,请考虑下列方案:应用程序从定期更新的 XML 文件中读取财务信息。应用程序处理文件中的数据并以可使用的格式创建表示该数据的对象图形。应用程序缓存该数据并在从中读取该数据的文件上插入依赖项。当更新该文件时,数据从缓存中被移除,应用程序可以重新读取它并重新插入该数据的更新副本。
</ul>

<a name="samples"><span class="subhead">使用数据缓存</span>
<p>
下面的示例说明简单的缓存使用。该示例执行数据库查询并缓存结果,并在应用程序的生存期内继续使用此结果。当运行此示例时,请注意页面底部的消息。当首次被请求时,它指出数据是从数据库服务器中显式检索的。刷新页面后,页说明使用的是缓存副本。
<p>
<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/cache/CS/datacache1.aspx"
  ViewSource="/quickstart/aspplus/samples/cache/datacache1.src"
  Icon="/quickstart/aspplus/images/datacache1.gif"
  Caption="C# Datacache1.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/cache/VB/datacache1.aspx"
  ViewSource="/quickstart/aspplus/samples/cache/datacache1.src"
  Icon="/quickstart/aspplus/images/datacache1.gif"
  Caption="VB Datacache1.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/cache/JS/datacache1.aspx"
  ViewSource="/quickstart/aspplus/samples/cache/datacache1.src"
  Icon="/quickstart/aspplus/images/datacache1.gif"
  Caption="JScript Datacache1.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>

<p>
下一个示例说明依赖于 XML 文件的缓存项。它与第一个示例类似,但在此例中是从 XML 数据源而不是从数据库服务器中检索数据。当缓存数据时,XML 文件被添加为依赖项。
<p>
当使用页面底部的窗体添加新记录时,XML 文件被更新并且必须重新创建缓存项。
<p>

<Acme:LangSwitch runat="server">
  <CsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/cache/CS/datacache2.aspx"
  ViewSource="/quickstart/aspplus/samples/cache/datacache2.src"
  Icon="/quickstart/aspplus/images/datacache2.gif"
  Caption="C# Datacache2.aspx"
  runat="server" />
  </CsTemplate>
  <VbTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/cache/VB/datacache2.aspx"
  ViewSource="/quickstart/aspplus/samples/cache/datacache2.src"
  Icon="/quickstart/aspplus/images/datacache2.gif"
  Caption="VB Datacache2.aspx"
  runat="server" />
  </VbTemplate>
  <JsTemplate>
<Acme:SourceRef
  RunSample="/quickstart/aspplus/samples/cache/JS/datacache2.aspx"
  ViewSource="/quickstart/aspplus/samples/cache/datacache2.src"
  Icon="/quickstart/aspplus/images/datacache2.gif"
  Caption="JScript Datacache2.aspx"
  runat="server" />
  </JsTemplate>
</Acme:LangSwitch>
<p>
注意:文件依赖项是通过使用 <b>Cache.Insert</b> 并提供引用 XML 文件的 <b>CacheDependency</b> 对象添加的。

<p><Acme:TabControl runat="server">
<Tab Name="C#">
Cache.Insert("MyData", Source,
         new CacheDependency(Server.MapPath("authors.xml")));
</Tab>

<Tab Name="VB">
Cache.Insert("MyData", Source, _
         New CacheDependency(Server.MapPath("authors.xml")))
</Tab>

<Tab Name="JScript">
Cache.Insert("MyData", Source,
         new CacheDependency(Server.MapPath("authors.xml")));
</Tab>

</Acme:TabControl><p>

缓存项可以依赖于一个或多个文件或键。如前面提到的,应用程序也可以设置缓存项的过期策略。下列代码设置绝对的缓存过期时间。

<p><Acme:TabControl runat="server">
<Tab Name="C#">
Cache.Insert("MyData", Source, null,
             DateTime.Now.AddHours(1), TimeSpan.Zero);
</Tab>

<Tab Name="VB">
Cache.Insert("MyData", Source, null, _
             DateTime.Now.AddHours(1), TimeSpan.Zero)
</Tab>

<Tab Name="JScript">
Cache.Insert("MyData", Source, null,
             DateTime.Now.AddHours(1), TimeSpan.Zero);
</Tab>

</Acme:TabControl><p>

相关的参数是对 <b>DateTime.Now.AddHours(1)</b>的调用,<b>DateTime.Now.AddHours(1)</b> 指示该项自插入后一小时过期。最后一个参数 <b>TimeSpan.Zero</b> 表示此项没有相对过期策略。
<p>
下列代码显示如何设置相对过期策略。它插入一个项,该项自上次访问后 20 分钟过期。注意 <b>DateTime.MaxValue</b> 的使用,它表示此项没有绝对过期策略。

<p><Acme:TabControl runat="server">
<Tab Name="C#">
Cache.Insert("MyData", Source, null, DateTime.MaxValue,
             TimeSpan.FromMinutes(20));
</Tab>

<Tab Name="VB">
Cache.Insert("MyData", Source, null, DateTime.MaxValue, _
             TimeSpan.FromMinutes(20))
</Tab>

<Tab Name="JScript">
Cache.Insert("MyData", Source, null, DateTime.MaxValue,
             TimeSpan.FromMinutes(20));
</Tab>

</Acme:TabControl><p>

<h4><a name="summary">本节小结</a></h4>
<ol>
<li>数据缓存允许以编程方式缓存任意对象。
<li>ASP.NET 缓存支持过期和依赖项。
<li>缓存被限制在应用程序的范围内,并且它的生存期与应用程序的生存期相同。
</ol>

<!-- #include virtual="/quickstart/aspplus/include/footer.inc" -->

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -