如何在ASP.NET中使用缓存Caching
    Caching缓存,就是将一些生成代价比较大的常用数据,保存起来重用。一般数据都保存在内存中,因为从内存中读取数据比从数据库等其他地方要快。 
ASP.NET通过两种方式支持缓存:
1.通过Cache API存储任意数据;
2.通过页面输出缓存经常被访问的页面。
一个例子:
一个电子商务的站点, 它的目录一般一周更新一次。站点提供了一套用户界面让客户订购产品。当一个客户浏览目录时,系统将通过网络去查询数据库,进行各种计算,最后返回结果。
从服务器查询这些目录数据的操作是很频繁的。我们知道,这些数据一周才变化一次。所以以下的几种操作将带来性能上的损失。
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.
VB.NET
C#
我们很容易用Cache对象来改写这段代码,使只在DataSet不存在在Cache中才调用LoadDataSet()。
VB.NET
C#
Cache对象在许多地方和Application对象有许多相似之处,而最大的不同是Cache支持了依赖。
ASP.NET通过两种方式支持缓存:
1.通过Cache API存储任意数据;
2.通过页面输出缓存经常被访问的页面。
一个例子:
一个电子商务的站点, 它的目录一般一周更新一次。站点提供了一套用户界面让客户订购产品。当一个客户浏览目录时,系统将通过网络去查询数据库,进行各种计算,最后返回结果。
从服务器查询这些目录数据的操作是很频繁的。我们知道,这些数据一周才变化一次。所以以下的几种操作将带来性能上的损失。
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.
VB.NET
 1![]() Private Function LoadDataSet() As DataSet
Private Function LoadDataSet() As DataSet 
2![]() Dim sqlConnection As SQLConnection
   Dim sqlConnection As SQLConnection 
3![]() Dim sqlAdapater As SQLDataSetCommand
   Dim sqlAdapater As SQLDataSetCommand 
4![]() Dim datasetProducts As New DataSet()
   Dim datasetProducts As New DataSet() 
5![]() Dim sqlDSN As String
   Dim sqlDSN As String 
6![]() Dim sqlSelect As String
   Dim sqlSelect As String 
7![]()
8![]() " Connection String and Select statement
  " Connection String and Select statement 
9![]() sqlDSN = "server=localhost;uid=sa;pwd=;database=grocertogo"
   sqlDSN = "server=localhost;uid=sa;pwd=;database=grocertogo" 
10![]() sqlSelect = "Select * From Products"
   sqlSelect = "Select * From Products" 
11![]()
12![]() " Connect
  " Connect 
13![]() sqlConnection = new SQLConnection(sqlDSN)
   sqlConnection = new SQLConnection(sqlDSN) 
14![]() sqlAdapater = new SQLDataSetCommand(sqlSelect, sqlConnection)
   sqlAdapater = new SQLDataSetCommand(sqlSelect, sqlConnection) 
15![]()
16![]() " Fill dataset create product table
  " Fill dataset create product table 
17![]() sqlAdapter1.FillDataSet(datasetProducts, "products")
   sqlAdapter1.FillDataSet(datasetProducts, "products") 
18![]()
19![]() Return products
  Return products 
20![]() End Function
End Function 
21![]()
 Private Function LoadDataSet() As DataSet
Private Function LoadDataSet() As DataSet 2
 Dim sqlConnection As SQLConnection
   Dim sqlConnection As SQLConnection 3
 Dim sqlAdapater As SQLDataSetCommand
   Dim sqlAdapater As SQLDataSetCommand 4
 Dim datasetProducts As New DataSet()
   Dim datasetProducts As New DataSet() 5
 Dim sqlDSN As String
   Dim sqlDSN As String 6
 Dim sqlSelect As String
   Dim sqlSelect As String 7

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

12
 " Connect
  " Connect 13
 sqlConnection = new SQLConnection(sqlDSN)
   sqlConnection = new SQLConnection(sqlDSN) 14
 sqlAdapater = new SQLDataSetCommand(sqlSelect, sqlConnection)
   sqlAdapater = new SQLDataSetCommand(sqlSelect, sqlConnection) 15

16
 " Fill dataset create product table
  " Fill dataset create product table 17
 sqlAdapter1.FillDataSet(datasetProducts, "products")
   sqlAdapter1.FillDataSet(datasetProducts, "products") 18

19
 Return products
  Return products 20
 End Function
End Function 21

C#
 1![]() private DataSet LoadDataSet()
private DataSet LoadDataSet() 
2![]() {
{ 
3![]() SQLConnection sqlConnection;
 SQLConnection sqlConnection; 
4![]() SQLDataSetCommand sqlAdapater;
 SQLDataSetCommand sqlAdapater; 
5![]() DataSet datasetProducts = new DataSet();
 DataSet datasetProducts = new DataSet(); 
6![]() string sqlDSN;
 string sqlDSN; 
7![]() string sqlSelect;
 string sqlSelect; 
8![]() sqlDSN = "server=localhost;uid=sa;pwd=;database=grocertogo";
 sqlDSN = "server=localhost;uid=sa;pwd=;database=grocertogo"; 
9![]() sqlSelect = "Select * From Products";
 sqlSelect = "Select * From Products"; 
10![]() sqlConnection = new SQLConnection(sqlDSN);
 sqlConnection = new SQLConnection(sqlDSN); 
11![]() sqlAdapater = new SQLDataSetCommand(sqlSelect, sqlConnection);
 sqlAdapater = new SQLDataSetCommand(sqlSelect, sqlConnection); 
12![]() sqlAdapter1.FillDataSet(datasetProducts, "products");
 sqlAdapter1.FillDataSet(datasetProducts, "products"); 
13![]() return products;
 return products; 
14![]() }
}
 private DataSet LoadDataSet()
private DataSet LoadDataSet() 2
 {
{ 3
 SQLConnection sqlConnection;
 SQLConnection sqlConnection; 4
 SQLDataSetCommand sqlAdapater;
 SQLDataSetCommand sqlAdapater; 5
 DataSet datasetProducts = new DataSet();
 DataSet datasetProducts = new DataSet(); 6
 string sqlDSN;
 string sqlDSN; 7
 string sqlSelect;
 string sqlSelect; 8
 sqlDSN = "server=localhost;uid=sa;pwd=;database=grocertogo";
 sqlDSN = "server=localhost;uid=sa;pwd=;database=grocertogo"; 9
 sqlSelect = "Select * From Products";
 sqlSelect = "Select * From Products"; 10
 sqlConnection = new SQLConnection(sqlDSN);
 sqlConnection = new SQLConnection(sqlDSN); 11
 sqlAdapater = new SQLDataSetCommand(sqlSelect, sqlConnection);
 sqlAdapater = new SQLDataSetCommand(sqlSelect, sqlConnection); 12
 sqlAdapter1.FillDataSet(datasetProducts, "products");
 sqlAdapter1.FillDataSet(datasetProducts, "products"); 13
 return products;
 return products; 14
 }
}我们很容易用Cache对象来改写这段代码,使只在DataSet不存在在Cache中才调用LoadDataSet()。
VB.NET
1![]() Public Function GetProductData() As DataSet
Public Function GetProductData() As DataSet 
2![]() If (IsNothing(Cache("ProductData")) Then
   If (IsNothing(Cache("ProductData")) Then 
3![]() Cache("ProductData") = LoadDataSet()
     Cache("ProductData") = LoadDataSet() 
4![]()
5![]() Return Cache("ProductData")
  Return Cache("ProductData") 
6![]() End Function
End Function 
 Public Function GetProductData() As DataSet
Public Function GetProductData() As DataSet 2
 If (IsNothing(Cache("ProductData")) Then
   If (IsNothing(Cache("ProductData")) Then 3
 Cache("ProductData") = LoadDataSet()
     Cache("ProductData") = LoadDataSet() 4

5
 Return Cache("ProductData")
  Return Cache("ProductData") 6
 End Function
End Function C#
1![]() public DataSet GetProductData()
public DataSet GetProductData()
2![]() {
{
3![]() if(Cache["ProductData"] == null)
 if(Cache["ProductData"] == null)
4![]() {
 {
5![]() Cache["ProductData"] = LoadDataSet()
   Cache["ProductData"] = LoadDataSet()
6![]() }
 }
7![]() return Cache["ProductData"];
 return Cache["ProductData"];
8![]() }
}
 public DataSet GetProductData()
public DataSet GetProductData()2
 {
{3
 if(Cache["ProductData"] == null)
 if(Cache["ProductData"] == null)4
 {
 {5
 Cache["ProductData"] = LoadDataSet()
   Cache["ProductData"] = LoadDataSet()6
 }
 }7
 return Cache["ProductData"];
 return Cache["ProductData"];8
 }
}Cache对象在许多地方和Application对象有许多相似之处,而最大的不同是Cache支持了依赖。
 
                    
                

 
  
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号