日期:2014-02-26  浏览次数:20381 次

Stephen Walther
  
  Microsoft Corporation
  
  适用于:
  
  Microsoft ASP.NET 2.0
  
  Microsoft ASP.NET Framework
  
  Microsoft SQL Server
  
  Microsoft Visual Studio .NET
  
  摘要:本文中,Stephen Walther 将重点介绍 ASP.NET 2.0 中新增的缓存功能,以及如何使用这些新功能改进 ASP.NET 应用程序的性能和可扩展性。(本文包含一些指向英文站点的链接。)
  
  
  
  本页内容
   更轻松的数据缓存
   使用 SQL Cache Invalidation
   使用 Post-Cache Substitution
   结论
  
  对于由数据库驱动的 Web 应用程序来说,要改进其性能,最好的方法就是使用缓存。从数据库中检索数据可能是您在 Web 站点上执行的最慢的操作之一。如果能够将数据库中的数据缓存到内存中,就无需在请求每个页面时都访问数据库,从而可以大大提高应用程序的性能。
  
  缓存有一个且只有一个缺点,那就是数据过期的问题。如果将数据库表的内容缓存到内存中,当基础数据库表中的记录发生更改时,您的 Web 应用程序将显示过期的、不准确的数据。对于某些类型的数据,即便显示的数据稍微有些过期,影响也不会太大;但对于诸如股票价格和竞拍出价之类的数据,即使显示的数据稍微有些过期也是不可接受的。
  
  Microsoft ASP.NET 1.0 Framework 没有针对此问题提供一个完善的解决方案。使用 ASP.NET 1.0 Framework 时,您不得不在性能和数据过期之间作出权衡。幸运的是,Microsoft ASP.NET 2.0 Framework 提供了一项新功能,称为 SQL Cache Invalidation,可以解决这一棘手的问题。
  
  在本文中,您将进一步了解 ASP.NET 2.0 Framework 中许多新的缓存改进功能。首先,您将了解到如何在新增的 DataSource 控件中集成缓存支持。然后,您将了解到如何配置和使用 SQL Cache Invalidation。最后,您将了解到随 ASP.NET 2.0 Framework 引入的一个新控件:Substitution 控件,使用该控件可以向已缓存的页面中插入动态内容。
  
  更轻松的数据缓存
  在 ASP.NET 2.0 Framework 中,最大的变化之一就是在 ASP.NET 页面上访问数据库数据的方式发生了变化。ASP.NET 2.0 Framework 包含一组新的控件,统称为 DataSource 控件。您可以使用这些控件来表示数据源,例如数据库或 XML 文件。
  
  在 ASP.NET 1.0 Framework 中,是通过将控件绑定到 DataSet 或 DataReader,使用控件来显示数据库数据的。而在 ASP.NET 2.0 Framework 中,通常是将控件绑定到 DataSource 控件。通过 DataSource 控件,您可以创建显示数据库数据的 ASP.NET 页面,而不用为访问数据库编写任何代码。
  
  在处理数据库数据时,通常使用下列三个 DataSource 控件中的一个控件:
  
  • SqlDataSource — 表示 SQL 数据源,例如 Microsoft SQL Server 或 Oracle 数据库。
  
  • AccessDataSource — 一个专用的 SqlDataSource 控件,用于 Microsoft Access 数据库。
  
  • ObjectDataSource — 表示充当数据源的自定义业务对象。
  
  
  例如,假设您要在 DropDownList 控件中显示从数据库中检索到的书目列表(参见图 1)。列表 1 中的页面说明了如何将 DropDownList 控件绑定到 SqlDataSource 控件。
  
  图 1:使用 SqlDataSource 控件检索数据
  
  
  列表 1:DisplayTitles.aspx
  
  <html>
  <head runat="server">
  <title>Display Titles</title>
  </head>
  <body>
  <form id="form1" runat="server">
  
  <asp:DropDownList
  ID="DropDownList1"
  DataSourceId="SqlDataSource1"
  DataTextField="Title"
  Runat="server" />
  
  <asp:SqlDataSource
  ID="SqlDataSource1"
  ConnectionString="Server=localhost;database=Pubs"
  SelectCommand="SELECT Title FROM Titles"
  Runat="server" />
  
  </form>
  </body>
  </html>
  
  请注意,列表 1 中的 SqlDataSource 控件用于提供连接字符串,SQL SELECT 命令用于从数据库中检索记录。DropDownList 控件通过其 DataSourceID 属性绑定到 SqlDataSource 控件。
  
  使用 DataSource 控件缓存数据
  使用 DataSource 控件,不仅可以更轻松地连接数据库,还使缓存数据库数据变得更容易。只需在 SqlDataSource 控件上设置一两个属性,就可以自动在内存中缓存由 DataSource 控件表示的数据。
  
 &nbs