ASP.NET 2.0数据教程之五十八:用ObjectDataSource缓存数据

返回“ASP.NET 2.0数据教程目录”

导言

就计算机科学而言,caching就是将所需要的数据或信息的备份放 在某个地方,便于快速访问的这样一个过程。以数据处理(data-driven)程序为 例,程序的大部分时间浪费在数据查询上。要提升这种程序的性能,通常的做法 是将查询结果存放在程序的存储器里。

ASP.NET 2.0提供了各种各样的缓 存方式。对web页面和用户控件可以通过output caching进行缓存;同样我们可以 通过ObjectDataSource 和SqlDataSource控件,在控件级(control level)对数 据进行缓存;同时,ASP.NET的data cache提供了丰富的缓存接口(caching API ),供页面开发员通过编程缓存对象。在本文及接下来的3篇文章我们将对 ObjectDataSource的缓存属性以及data cache进行考察;我们也将探究如何在启 动时对application-wide数据进行缓存,以及通过使用SQL cache dependencies 对缓存数据刷新。本系列并没有探讨output caching,相关细节请参考文章 Output Caching in ASP.NET 2.0

http://aspnet.4guysfromrolla.com/articles/121306- 1.aspx

主要的缓存要点

由于缓存通过将数据的副本放置在一个便 于快速访问的地方来提高程序的总体性能。由于它仅仅是一个副本,当源数据发 生改变时,副本不能同步更新。为此,页面开发员应制定一个标准将其清除出内 存,可以使用如下的2种方法之一:

Time-based标准:向内存添加的条目 (item),只能在内存里驻留固定或灵活(sliding)的一段时间。比如,开发者可设 定一个时间段,比如60秒,当条目添加到内存后,不管访问它的频率有多高,60 秒后就会被清除掉;如果是灵活(sliding)处理的话,当最后一次被访问后,未再 次被访问的时间一旦超出60秒,也会被清除掉。

Dependency-based标准: 当向内存添加条目时为其分配一个从属体(dependency),当条目对应的从属体发 生改变时将条目清除掉。从属体可以是一个文件;另一个缓存条目;或者干脆是 这两者的混合体( combination);当然还可以是SQL cache dependencies,它可 以向内存添加条目,当源数据改变时将条目清除掉。我们将在接下来的文章 《Using SQL Cache Dependencies》里详细考察。

不管是哪种标准,在条 目被清除掉以前,我们都可以对其访问。如果内存达到了它的极限,它会清除掉 已有的条目后再添加新的条目。因此,当处理缓存数据时很重要的一点是我们要 充分考虑到缓存数据已被清除的可能。在下一篇文章《Caching Data in the Architecture》我们考察采用哪种模式从内存访问数据。

缓存是提升程序 性能的一种较为经济的方法,就像Steven Smith在他的文章《ASP.NET Caching: Techniques and Best Practices:》里阐述的一样:“缓存是获得‘ 上佳’性能的一种好方法,不需要太多的时间和分析。… 存储器也 便宜,要获得你期望的性能,靠缓存技术你需要花30秒;靠优化代码和数据库你 可能要几天乃至几周时间…”

虽然缓存可以显而易见的提升 系统性能,但并不是适用于所有的应用程序,比如某些实时(real-time)、频繁更 新数据的程序就不适合。

但是对大部分程序而言,还是适用的。关于 ASP.NET 2.0里的缓存的更多背景资料请参考ASP.NET 2.0 QuickStart Tutorials 系列的Caching for Performance 部分。

时间: 2024-09-12 10:48:17

ASP.NET 2.0数据教程之五十八:用ObjectDataSource缓存数据的相关文章

ASP.NET 2.0数据教程之五十九:体系分层缓存数据

返回"ASP.NET 2.0数据教程目录" 导言: 正如前面章节所言,缓存ObjectDataSource的数据只需要简单的设 置一些属性.然而,它是在表现层对数据缓存,这就与ASP.NET page页面缓存策 略(caching policies)紧密的耦合(tightly couples)起来.我们对体系机构分层 的原因之一便是打破这种耦合.拿业务逻辑层为例,将业务逻辑从ASP.NET页面脱 离出来:而数据访问层将数据访问的细节ASP.NET页面脱离出来.从某种意义来说 ,将业务逻

在ASP.NET 2.0中操作数据之五十八:在程序启动阶段缓存数据_自学过程

导言: 前面2章考察了在表现层和缓存层缓存数据.在第56章,我们探讨了在表现层设置ObjectDataSource的相关cache属性来缓存数据.在第57章,我们探讨了创建一个单独的分开的缓存层.这2章都是采用"应激装载"(reactive loading)的模式来缓存数据.该模式下,每次请求数据时,系统先检查其是否在内存,如果没有,则从数据源--比如数据库,来获取数据,然后将其存储在内存里.该模式的优势在于执行起来很容易:而缺点之一在于应"请求"(requests

在ASP.NET 2.0中操作数据之五十九:使用SQL缓存依赖项SqlCacheDependency_自学过程

导言: 在56和57章探讨的缓存技术使用的是基于时间的缓存周期,当过了某段时间后便将缓存数据从内存清除.当设置缓存时间为x秒时,数据在x秒内都是"新"的.当然,就像在60章谈到的那样,对静态数据来说,x可延伸到web应用程序的整个生命周期(lifetime). 当缓存数据时,基于时间周期的技术因为其易用性而常常被采用,不过又常常不那么完美.理想的状态是这样的:数据库数据还是应缓存在内存,直到源数据(underlying data)发生改变时才从内存清除.这样的话可以最大化的获取缓存带来

ASP.NET 2.0数据教程之五十六:添加新记录时包含一个文件上传选项

返回"ASP.NET 2.0数据教程目录" 导言: 在前面2节教程,我们探讨了如何使用FileUpload控件从客户端 向服务器上传文件,以及如何在数据Web控件里显示二进制数据. 在本节 ,我们将创建一个web页面以添加新的种类.除了为类的name和description属性 添加TextBoxes控件外,我们还要在页面上添加2个FileUpload控件 --一个用来上传新类的图片,另一个用来上传类的小说明册子.上 传的图片将直接存储在新记录的Picture列.与此相反,小册子将存储

ASP.NET 2.0数据教程之五十四:上传文件

返回"ASP.NET 2.0数据教程目录" 导言: 到目前为止,我们的教程围绕的是text数据.然而,很多应用 程序既需要处理text数据,也需要处理二进制数据.比如招聘网站可能需要用户 上传Word或PDF格式的简历. 使用二进制数据面临一项挑战:在应用程序 中如何存储二进制数据.我们必须更新添加记录的界面以支持用户上传本地电脑 中的文件,并添加额外的功能以下载某条记录的相关二进制数据.本章以及接下 来的3章,我们探讨如何处理这些问题.在本系列教程结束时,我们将创建一个功 能完善的应

ASP.NET 2.0数据教程之五十二:为GridView控件添加Checkboxes列

返回"ASP.NET 2.0数据教程目录" 导言: 在前面的教程里我们探讨了如何为GridView控件添加radio buttons列.当用户最多只能选择一项数据时,我们可以在用户界面里添加radio buttons列,而有时候,我们需要选择任意多项数据.比如,基于Web的邮箱客户 端列出了一系列的邮件,及一列checkboxes,用户可选择任意封邮件并执行相同 的操作,比如移动到另一个文件夹或将之删除. 在本教程,我们将探讨如 何添加checkboxes列,以及发生页面回传后如何确定

ASP.NET 2.0数据教程之五十:对SqlDataSource控件使用开放式并发

返回"ASP.NET 2.0数据教程目录" 导言: 在前面的教程里,我们考察了如何为SqlDataSource控件添加插 入.更新.删除功能.简而言之,就是为其nsertCommand, UpdateCommand和 DeleteCommd属性赋以相应的INSERT,UPDATE和DELETESQL语句,并将相应的参数放 置在 <InsertParameters>, <UpdateParameters>和 <DeleteParameters>标签里.

ASP.NET 2.0数据教程之四十八:在SqlDataSource中使用参数化查询

返回"ASP.NET 2.0数据教程目录" 导言 在前一节教程中,我们看到了如何使用SqlDataSource控件直接从 数据库中获取数据.通过"配置数据源"向导,我们选择一个特定的 数据库,然后就可以:从一个表或视图中选择一些列:输入一个自定义SQL语句: 使用一个存储过程.不管你是手工输入SQL语句还是在向导页中选择一堆列,反正 最终都是给SqlDataSource控件的SelectCommand属性赋上一个SELECT语句,在 SqlDataSource的Se

ASP.NET 2.0数据教程之六十八:在TableAdapters里使用现有的存储过程

返回"ASP.NET 2.0数据教程目录" 导言: 在前面的文章里我们考察了如何让TableAdapters向导自动的创 建存储过程.而在本文,我们将考察如何让TableAdapter使用现有的存储过程.由 于Northwind数据库现有的存储过程很少,我们也需要考察如何在Visual Studio 环境里手动向数据库添加新的存储过程. 注意: 在第63章 <Wrapping Database Modifications within a Transaction>里我们向