数据缓存
ASP.NET缓存引擎支持的最后一种缓存类型是“数据缓存”。根据定义,它的工作级别要低于整页输出缓存和部分缓存。假如几个网页都要使用相同的数据(例如一个产品列表),但要以不同方式来显示这些数据,就可考虑使用这种缓存。当然,数据缓存之所以具有性能优势,是因为减少了对后端数据库的调用次数。
为了在缓存中添加一个项,需使用Page或UserControl类的Cache属性,因为这两个类最终都是从Control类派生的。Cache属性揭示出了System.Web.Caching.Cache对象,利用它可将数据当作键和值的一个组合来存储。使用该属性,开发者可编写代码来填充一个项,并把它放到缓存中;如果该项已经存在,就直接将其从缓存中取出。如以下C#代码所示。
DataTable dt = null;
if (this.Cache["Products"] == null)
{
// Go get the data from the database
this.Cache.Insert("Products", dt, null, _
DateTime.Now.AddHours(6), TimeSpan.Zero);
}
else
{
dt = this.Cache["Products"] As DataTable;
}
上例首先检查具有Products键的项是否在缓存中。如果不在,就从后端数据库检索一个ADO.NET DataTable,并使用Insert方法把它放到缓存中。本例使用的是Insert的一个重载版本,它允许为缓存对象指定一个绝对过期时间(6小时),而不是指定一个周期性的过期。相反,如果缓存中已经有这个项,就将其取回,并使用As表达式,将其强制转换回一个DataTable。
对ADO.NET检索到的数据进行缓存时,注意既可像上例那样缓存DataTable对象,也可缓存整个DataSet对象,因为两种对象都同任何数据源完全地断开,不会保持数据库连接。对数据读取器(比如SqlDataReader)进行缓存似乎更好一些,因为它们只使用一次(它们是“只进”的读取器),而且在打开的情况下将一直占据一个数据库连接。
ASP.NET缓存引擎强大的灵活性和功能使其成为创建高性能ASP.NET应用程序时最重要的特性之一。根据本文提供的基本信息,你可在自己的应用程序轻松引入缓存引擎功能。
