C#系統快取全解析

隨夢而飛發表於2014-08-12

原文:http://blog.csdn.net/wyxhd2008/article/details/8076105

目錄(?)[-]

系統快取有什麼好處呢?舉個簡單的例子,你想通過網頁查詢某些資料,而這些資料並非實時變化,或者變化的時間是有期限的。例如查詢一些歷史資料。那麼每個使用者每次查的資料都是一樣的。如果不設定快取,ASP.NET也會根據每個使用者的請求重複查詢n次,這就增加了不必要的開銷。所以,可能的情況下儘量使用快取,從記憶體中返回資料的速度始終比去資料庫查的速度快,因而可以大大提供應用程式的效能。畢竟現在記憶體非常便宜,用空間換取時間效率應該是非常划算的。尤其是對耗時比較長的、需要建立網路連結的資料庫查詢操作等。快取功能是大型網站設計一個很重要的部分。由資料庫驅動的Web應用程式,如果需要改善其效能,最好的方法是使用快取功能。 

系統快取全解析1:系統快取的概述 

1     快取的分類     從分佈上來看,我們可以概括為客戶端快取和伺服器端快取。如圖所示:


客戶端快取—— 這點大家都有直觀的印象。比如你去一個新的網站,第一次可能要花一陣子時間才能載入整個頁面。而以後再去呢,時間就會大大的縮短,原因就在於這個客戶端快取。現在的瀏覽器都比較智慧,它會在客戶機器的硬碟上保留許多靜態的檔案,比如各種gif,jpeg檔案等等。等以後再去的時候,它會盡量使用本地快取裡面的檔案。只有伺服器端的檔案更新了,或是快取裡面的檔案過期了,它才會再次從伺服器端下載這些東西。很多時候是IE替我們做了這件事情。 

伺服器端快取—— 有些東西沒法或是不宜在客戶端快取,那麼我們只好在伺服器端想想辦法了。伺服器端快取從性質上看,又可以分為兩種。

  1. 靜態檔案快取

    好多頁面是靜態的,很少改動,那麼這種檔案最適於作靜態快取。現在的IIS 6.0這部分內容是直接存放在Kernel的記憶體中,由HTTP.SYS直接管理。由於它在Kernel Space,所以它的效能非常的高。使用者的請求如果在快取裡面,那麼HTTP.SYS直接將內容傳送到networkdriver上去,不需要像以前那樣從IISUser space的記憶體copyKernel中,然後再傳送到TCP/IP stack上。Kernellevel cache幾乎是現在高效能Web server的一個必不可少的特性。

  2. 動態快取

    動態快取是比較有難度的。因為你在快取的時候要時刻注意一個問題,那就是快取的內容是不是已經過時了。因為內容過時了可能會有很嚴重的後果。比如網上買賣股票的網站。你給別人提供的價格是過時的,那人家非砍了你不可。快取如何發現自己是不是過時就是一個非常複雜的問題。

    ASP.NET中,常見的動態快取主要有以下幾種手段:

  Ø  傳統快取方式

  Ø  頁面輸出快取。

  Ø  頁面區域性快取。

  Ø  利用.NET提供的System.Web.Caching 快取。

  Ø  快取依賴。

2  傳統快取方式

比如將可重複利用的東西放到Application或是Session中去儲存。

 Session["Style"] = val;
 Application["Count"] =0;

 

 

相關文章