如何在ASP.NET中使用緩衝Caching

來源:互聯網
上載者:User
    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 1Private Function LoadDataSet()Function LoadDataSet() As DataSet 
 2   Dim sqlConnection As SQLConnection 
 3   Dim sqlAdapater As SQLDataSetCommand 
 4   Dim datasetProducts As New DataSet() 
 5   Dim sqlDSN As String 
 6   Dim sqlSelect As String 
 7
 8  " Connection String and Select statement 
 9   sqlDSN = "server=localhost;uid=sa;pwd=;database=grocertogo" 
10   sqlSelect = "Select * From Products" 
11
12  " Connect 
13   sqlConnection = new SQLConnection(sqlDSN) 
14   sqlAdapater = new SQLDataSetCommand(sqlSelect, sqlConnection) 
15
16  " Fill dataset create product table 
17   sqlAdapter1.FillDataSet(datasetProducts, "products") 
18
19  Return products 
20End Function 
21

C# 1private DataSet LoadDataSet() 
 2{ 
 3 SQLConnection sqlConnection; 
 4 SQLDataSetCommand sqlAdapater; 
 5 DataSet datasetProducts = new DataSet(); 
 6 string sqlDSN; 
 7 string sqlSelect; 
 8 sqlDSN = "server=localhost;uid=sa;pwd=;database=grocertogo"; 
 9 sqlSelect = "Select * From Products"; 
10 sqlConnection = new SQLConnection(sqlDSN); 
11 sqlAdapater = new SQLDataSetCommand(sqlSelect, sqlConnection); 
12 sqlAdapter1.FillDataSet(datasetProducts, "products"); 
13 return products; 
14}

我們很容易用Cache對象來改寫這段代碼,使只在DataSet不存在在Cache中才調用LoadDataSet()。

VB.NET1Public Function GetProductData()Function GetProductData() As DataSet 
2   If (IsNothing(Cache("ProductData")) Then 
3     Cache("ProductData") = LoadDataSet() 
4
5  Return Cache("ProductData") 
6End Function 

C#1public DataSet GetProductData()
2{
3 if(Cache["ProductData"] == null)
4 {
5   Cache["ProductData"] = LoadDataSet()
6 }
7 return Cache["ProductData"];
8}

Cache對象在許多地方和Application對象有許多相似之處,而最大的不同是Cache支援了依賴。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.