ASP.NET Caching

asp.net

Caching
缓存,就是将一些生成代价比较大的常用数据,保存起来重用   
。一般数据都保存在内存中,因为从内存中读取数据比从数据库等其他地方要快。
ASP.NET通过两种方式支持缓存:通过Cache API存储任意数据,通过页面输出缓存经常被访问的页面。

让我们来看一个例子。

一个电子商务的站点, 它的目录一般一周更新一次。站点提供了一套用户界面让客户订购产品。当一个客户浏览目录时,系统将通过网络去查询数据库,进行各种计算,最后返回结果。
从服务器查询这些目录数据的操作是很频繁的。我们知道,这些数据一周才变化一次。所以以下的几种操作将带来性能上的损失。

1. 执行ASP.NET的程序生成对数据库的查询语句。
2. 通过网络,和数据库服务器进行通讯。
3. 数据库服务器编译执行查询(或是执行储存过程)。

缓存机制可以减少许多这样的工作,提高应用的性能和伸缩性。我们能缓存结果以便能静态的处理客户请求,来提高性能。同时,由于减少了处理每个请求使用的资源,因此也提高了系统的伸缩性。

Cache API
对于ASP开发人员来说,把常用的数据保存在内存里,并不是一个全新的概念。在ASP里,有两个对象完成它。
• Session 对象
• Application 对象

Session用来保存单个用户在多个请求间共享的数据,虽然在ASP.NET中有一些小的改动,但这些改动主要是在应用级的,对Session对象来说,仍然是一个保存键与键值对的集合。Application对象在ASP.NET也被保存下来了,同样是键与键值对的集合。在ASP和ASP.NET中,我们都可以使用以下代码来操作Application 对象

Application("SomeInterestingData") = "Example data"
Response.Write(Application("SomeInterestingData")

我们可以使用同样的方法访问Session对象。

ASP.NET带来了一个新的键与键值的对象—Cache.除了存储键与键值对外,Cache对象还提供了另外的一些存储短期数据的新功能:

依赖—当一个键插入Cache对象时,我们可以设置它的依赖性。当依赖的对象改变时,这个键将被删除。现在支持的依赖对象有文件,其他的键和时间。
自动失效—没有依赖的键值,当使用频率不高时,将被自动删除。
支持回调—当一个键将被删除时,我们可以得到一个事件,在这个事件中来更新键值或取消删除操作。
当我们在使用Cache对象时,必须注意这一点:
使用Cache对象中的键值之前,必须每一次都检查键值是否存在。
由于在Cache对象中的键值由于其依赖或者使用频率较低,都会被删除,所以,每一次使用Cache中的对象,都必须检查是否存在。
例如,我们可以用如下一段代码来返回DataSet.

Private Function LoadDataSet() As DataSet
    Dim sqlConnection As SQLConnection
    Dim sqlAdapater As SQLDataSetCommand
    Dim datasetProducts As New DataSet()
    Dim sqlDSN As String
    Dim sqlSelect As String

    ' Connection String and Select statement
    sqlDSN = "server=localhost;uid=sa;pwd=;database=grocertogo"
    sqlSelect = "Select * From Products"

    ' Connect
    sqlConnection = new SQLConnection(sqlDSN)
    sqlAdapater = new SQLDataSetCommand(sqlSelect, sqlConnection)

    ' Fill dataset create product table
    sqlAdapter1.FillDataSet(datasetProducts, "products")

    Return products
End Function

我们很容易用Cache对象来改写这段代码,使只在DataSet不存在在Cache中才调用LoadDataSet()。

Public Function GetProductData() As DataSet
    If (IsNothing(Cache("ProductData")) Then
        Cache("ProductData") = LoadDataSet()

    Return Cache("ProductData")
End Function

Cache对象在许多地方和Application对象有许多相似之处,而最大的不同是Cache支持了依赖。 

时间: 2024-10-06 13:23:52

ASP.NET Caching的相关文章

ASP.NET Caching /2

asp.net Cache Dependencies依赖可以使键值在文件改变时,或是在某一个指定时间被删除   .让我们看一下每种依赖. 文件依赖(File-based Dependency)文件依赖是指,当磁盘上的一个文件改变时,删除Cache对象中的对应一项.下面让我们看一个从XML文件中读取数据的例子. Dim dom As XmlDocument()dom.Load(Server.MapPath("product.xml")Cache("ProductData&quo

ASP.NET Caching /1

asp.net 作者: Rob Howard, Microsoft Corporation 日期: 2001年10月15日     Caching缓存,就是将一些生成代价比较大的常用数据,保存起来重用   .一般数据都保存在内存中,因为从内存中读取数据比从数据库等其他地方要快.ASP.NET通过两种方式支持缓存:通过Cache API存储任意数据,通过页面输出缓存经常被访问的页面. 让我们来看一个例子. 一个电子商务的站点, 它的目录一般一周更新一次.站点提供了一套用户界面让客户订购产品.当一个

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

返回"ASP.NET 2.0数据教程目录" 导言 就计算机科学而言,caching就是将所需要的数据或信息的备份放 在某个地方,便于快速访问的这样一个过程.以数据处理(data-driven)程序为 例,程序的大部分时间浪费在数据查询上.要提升这种程序的性能,通常的做法 是将查询结果存放在程序的存储器里. ASP.NET 2.0提供了各种各样的缓 存方式.对web页面和用户控件可以通过output caching进行缓存:同样我们可以 通过ObjectDataSource 和SqlDa

[ASP.NET] 如果将缓存“滑动过期时间”设置为1秒会怎样?

今天编写了一个采用ASP.NET Caching的组件,在为它编写Unit Test的过程中发现了一个有趣的问题,接下来我通过一个简单的实例说明这个问题.我们在一个控制台应用中编写了如下一段程序,这个段程序很简单:我们通过HttpRuntime的静态属性Cache得到表示当前缓存的Cache对象,并调用其Insert方法对当前的时间实施缓存.需要注意的是,我们采用"滑动时间"过期策略,并将这个滑动时间设置为1秒. 1: class Program 2: { 3: static void

一个伴随ASP.NET从1.0到4.0的OutputCache Bug介绍_实用技巧

我们先来一睹这个Bug的风采! 在一个.aspx文件中增加OutputCache设置,代码如下: 复制代码 代码如下: <%@ OutputCache Duration="300" VaryByParam="*"%> 上面的设置表示:缓存5分钟,根据不同的查询字符串更新缓存.Location使用的是默认值Any,也就是可以在浏览器.代理服务器.Web服务器三个地方进行缓存,在Response Headers中的体现就是Cache-Control:publ

转载:ASP.Net性能优化(作者:刘鉴平)

转载:ASP.Net性能优化(作者:刘鉴平)   ASP.Net <八段锦> ASP.Net性能优化的 八个设计要点 1. 使用Page.IsPostBack 这一项大多数人都做到了. If (!Page.IsPostBack)     { dbAcess oWS=new dbAccess(); DataSet ds=oWS.GetNewsInfoDS(); } 2. 使用存储进程 优点: o  Stored Procedure 是在编译后运行 o  系统体系结构自然分层 o  安全性   微

关于上下文(Context)/1(转MS)

关于上下文 Susan WarrenMicrosoft Corporation 2002年1月14日 编写 Web 应用程序时最常见的问题之一,是要让代码知道它的执行上下文.让我们通过一个简单的例子(即个性化页面)来说明这个问题:     请登录.与     欢迎 Susan!虽然看起来很简单,但即使是这一小段 Web UI,仍然需要好几段信息,而且每次请求该页时这些信息都会发生变化.我们需要知道以下内容: 用户登录了吗? 用户的显示名是什么? 更通常的问题是,每次请求该页时,唯一的上下文是什么

关于上下文-1 (转自msdn)

关于上下文 Susan WarrenMicrosoft Corporation 2002年1月14日 编写 Web 应用程序时最常见的问题之一,是要让代码知道它的执行上下文.让我们通过一个简单的例子(即个性化页面)来说明这个问题:     请登录.与     欢迎 Susan!虽然看起来很简单,但即使是这一小段 Web UI,仍然需要好几段信息,而且每次请求该页时这些信息都会发生变化.我们需要知道以下内容: 用户登录了吗? 用户的显示名是什么? 更通常的问题是,每次请求该页时,唯一的上下文是什么

The .NET Framework(非原创---外教讲义)

      The .Net Framework   Topics Understanding .NET Framework                                          Common Language Runtime (CLR)                                     Unified Programming Classes                                           Active Ser