深入剖析ASP.NET 2.0缓冲机制(1)

发表于:2007-06-11来源:作者:点击数: 标签:
【51CTO.com独家特稿】一、简介 ASP.NET 1.x Cache API是一种革命性特征。当一个XML文件或另一个缓冲项的内容改变时,Cache API提供了诸如声明性输出缓冲、以编程方式控制输出缓冲以及使缓冲项无效等能力。尽管这大大改进了Web应用程序的 性能 ,但遗憾的是

【51CTO.com独家特稿】一、简介

ASP.NET 1.x Cache API是一种革命性特征。当一个XML文件或另一个缓冲项的内容改变时,Cache API提供了诸如声明性输出缓冲、以编程方式控制输出缓冲以及使缓冲项无效等能力。尽管这大大改进了Web应用程序的性能,但遗憾的是,ASP.NET 1.x并没有提供一种机制来实现当数据库中的数据改变时使一个缓存对象中的数据无效。最终,在ASP.NET 2.0中加入了这一特征。此外,ASP.NET 2.0还提供了特定功能用于缓冲一个SqlDataSource控件的输出—你可以充分利用缓冲优点而不用编写一行代码。本文中,让我们共同讨论这些新的缓冲特征,以及如何把它们应用于自己的Web应用程序。

在ASP.NET 2.0中,缓冲以多种方式加以改进。也许最引人瞩目的改进是引入了数据库触发的缓存无效机制。在ASP.NET 1.x中,你能够基于一些预定义条件(例如一个XML文件中的改变,在另一个缓存项中的改变等)来使一个缓冲项无效。借助于这一特征,当数据或另一个缓冲项改变时,你可以删除或从缓存中使该项无效。然而,当一个SQL Server数据库中的数据改变时,ASP.NET 1.x Cache API并不允许你使缓存中的一个项成为无效的,尽管大多数应用程序都要求具有这种能力。相比之下,ASP.NET 2.0则特别重视这一点—通过提供数据库触发的缓存无效功能,它使你确保缓存中的项与数据库中的改变保持同步更新。

ASP.NET 2.0另一个重要的缓冲特征是能够在SqlDataSource级上支持缓冲。该SqlDataSource控件能够操作SQL Server、OLEDB、ODBC和Oracle数据库等多种数据库,而且支持你使用SQL命令选择、更新、删除和插入数据。现在,借助于在SqlDataSource控件级上设置缓冲属性的能力,你可以更为细致地控制缓冲的数据。

ASP.NET 2.0还提供一个新的Substitution控件,你能够使用它来把动态的内容注入到另一个缓冲的Web页面中。如果你有一个启动了输出缓冲功能的页面但是仍然想显示动态的内容(这需要在每次请求该页面时重新生成)的话,那么你可以考虑使用该Substitution控件。

下列几节中,我将详细分析上面的特征并提供相关的示例。

【提示】本文中提供了三个简单但完整的aspx页面源码,我使用Visual Studio 2005在一个简单web工程Caching中分别试验,并用浏览器预览这三个页面。至于如何建立工程与SQL Server 2005/2000/7.0示例数据库Northwind的连接,在此略过。

二、在SqlDataSource控件中实现基于时间的缓存无效

ASP.NET缓冲是一种能够改进Web应用程序性能的重要特征。事实上,改进一个数据库驱动的Web应用程序性能的最显著的方法正体现在对缓冲机制的巧妙把握上。在绝大多数情况下,从数据库中检索数据成为你能够实现的最慢的网站操作之一。然而,如果你能够在内存中恰当地缓存数据库数据并且尽可能在每一次页面请求时避免访问数据库,那么你一定能够显著地改进你的应用程序的性能。

ASP.NET 2.0提供了比ASP.NET 1.x更强的缓冲特征。其中,一个新的特征是,它能够把caching属性指定为数据源控件声明的一部分。ASP.NET 2.0中的这个新的数据源控件能够“无缝”地利用ASP.NET 2.0新的缓冲特征特征,从而使你能够把caching属性设置为SqlDataSource控件声明的一部分。

典型地,你可以通过设置SqlDataSource控件中的下列两个属性来支持缓冲:

◆EnableCaching—通过把这个属性设置为true,你可以启动一个SqlDataSource控件的缓冲功能。

◆CacheDuration—这个属性允许你设置或得到SqlDataSource控件中的缓冲数据的持续时间(这个属性以秒为单位指定)。

作为本文示例,不妨让我们考虑一下Northwind数据库中的categories和products表的情况。它在一个DropDownList中显示所有的产品种类并在一个GridView控件中显示属于一个特定种类的产品。首先,让我们使用Visual Studio 2005创建一个新的网站,并命名为Caching。然后,把一个Web页面TimeBasedCaching.aspx添加到其中。最后,按如下所示修改TimeBasedCaching.aspx文件中的代码:

<%@ Page Language="C#" %>

<html>

<head>

<title>SqlDataSource控件缓冲与参数分析试验</title>

</head>

<body>

<form id="form1" runat="server">

<asp:DropDownList DataValueField="CategoryID"

DataTextField="CategoryName"

DataSourceID="CategoriesDataSource"

ID="DropDownList1" Runat="server" AutoPostBack="True">

</asp:DropDownList>

<br/><br/>

<asp:GridView ID="GridView1" Runat="server"

DataSourceID="ProductsDataSource"

DataKeyNames="ProductID" AutoGenerateColumns="False">

<Columns>

<asp:BoundField HeaderText="ProductID" DataField="ProductID"

SortExpression="ProductID" />

<asp:BoundField HeaderText="Timestamp" DataField="Timestamp"

SortExpression="Timestamp" />

<asp:BoundField HeaderText="ProductName"

DataField="ProductName"

SortExpression="ProductName" />

<asp:BoundField HeaderText="QuantityPerUnit"

DataField="QuantityPerUnit"

SortExpression="QuantityPerUnit" />

<asp:BoundField HeaderText="UnitPrice" DataField="UnitPrice"

SortExpression="UnitPrice" />

</Columns>

</asp:GridView>

<asp:SqlDataSource ID="ProductsDataSource" Runat="server"

SelectCommand="SELECT DatePart(second, GetDate())

As Timestamp, *

FROM [Products] where CategoryID = @CategoryID"

ConnectionString="<%$ ConnectionStrings:Northwind %>"

EnableCaching="True" CacheDuration="10">

<SelectParameters>

<asp:ControlParameter Name="CategoryID"

ControlID="DropDownList1"

PropertyName="SelectedValue" />

</SelectParameters>

</asp:SqlDataSource>

<asp:SqlDataSource ID="CategoriesDataSource" Runat="server"

SelectCommand="SELECT * FROM [Categories]"

ConnectionString="<%$

ConnectionStrings:Northwind %>"

EnableCaching="True" CacheDuration="10"/>

</form>

</body>

</html>

在上面的代码中,到数据库的连接字符串是从web.config文件中检索的。这个web.config文件包含下列connectionStrings元素:

<connectionStrings>

<add name="Pubs"

connectionString="server=localhost;database=Pubs;

trusted_connection=true"/>

<add name="Northwind"

connectionString="server=localhost;database=Pubs;

trusted_connection=true"/>

</connectionStrings>

现在,既然要求的连接字符串已经在web.config文件中定义,那么,SqlDataSource控件就能够借助于下列声明来使用这个连接字符串:

<%$ ConnectionStrings:Northwind %>

上面的代码检索定义在Northwind连接字符串元素的connectionString属性中的连接字符串值。


共4页: 1 [2] [3] [4] 下一页

原文转自:http://www.ltesting.net

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
...