国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

asp.net SAF 中緩存服務的實現第1/5頁

2020-01-18 01:34:10
字體:
來源:轉載
供稿:網友
復制代碼 代碼如下:

protected void Page_Load(object sender, EventArgs e)    
{    
    webinfo info = new webinfo();    
    Response.Write("有static的執行結果:" + webinfo.a + "<br />");    
    Response.Write("沒有static的執行結果:" + info.b);    
}    

public class webinfo    
{    
    public static DateTime a = DateTime.Now;    
    public DateTime b = DateTime.Now;    
}   

下面內容多摘自該文章:結果是只要站點不重啟(代碼也不修改),那么a的值是恒定不變的,即使將頁面關了重新打開也一樣;而b則是刷新就變化。如果你從事Asp.Net的開發,提起緩存你可能首先會想到Output Cache、數據源緩存或者是基于System.Web.Caching.Cache的對象緩存。實際上緩存的目的就是把對象(數據)存儲在內存中,不用每次需要對象服務的時候都重新創建對象(相對耗時)。將對象聲明為static,那么對象將在其所屬的類被載入AppDomain時初始化,這樣對象的生命周期與AppDomain同樣長,從而起到緩存的目的。

設計思想 
       我們經常需要在應用程序中緩存一些常用數據供全局使用以提升性能。如果需要緩存的對象類型和數目是固定的,我們可能會直接將其聲明為static;如果我們需要緩存的對象類型和數目是不定的,我們可能會借助一個static Hashtable來實現。但是Hashtable有個缺陷:它沒有層次結構,它總是以鍵/值的形式來存儲數據,一個Key對應一個Value,如果我們想獲取相關聯的一組數據就會比較困難了。 

       XML文檔結構是樹形的,具有標準的層次結構。XPath用于從Xml文檔中選擇一個或多個結點。比如 "/BookStore/Book",選擇Book結點下的所有子結點。 

       SAF 中的緩存服務通過一個在內存中動態構造的Xml文檔樹作為橋梁,將靜態(static)緩存和XPath 這兩個技術結合了起來,支持使用XPath的語法來獲取Hashtable中對象。其中靜態緩存進行實際的數據緩存,XPath用于獲取數據對象。從程序員的角度來看,即是Hashtable的Key支持了XPath的語法,可以將原本“平板式”的Hashtable想象成為一個“樹形結構”,它的結點包含了緩存的數據,我們通過標準的XPath到達結點(當然這只是一個假象)并獲取數據。通過這種方式就可以使用XPath來一次獲取Hashtable中的多個相關數據對象。 簡單說,SAF緩存服務是為了實現一個有層次(樹形)的緩存結構,從而實現對緩存更加靈活的操作。

而實際上是怎么實現這一過程的呢?我們一步步來看:
1、首先在內存中動態構建一個 Xml文檔,它只包含一個根結點,可以任意命名,這里將它命名為了Cache。
2、提供一個Xpath路徑:獲取對象(數據)前首先要存儲對象,存對象自然要先提供一個路徑(這里稱為“路徑”,是因為它是一個XPath,實際上也就相當于Hashtable中的鍵Key)。
3、根據上一步提供的路徑,以Cache為根結點,逐層深入地創建XmlNode結點。
4、生成一個GUID,在葉結點上添加一個Key屬性,為這個Key屬性賦值為GUID。
5、在Hashtable中存儲對象,其中Hashtable的Key即為上一步生成的GUID,而Value為要存儲的對象。

       使用這種方式,Hashtable的實際的Key,即動態生成的GUID對程序員來說是透明的,程序員在存儲/獲取對象時,只需要提供XPath表達式就可以。下面這幅圖說明了它們之間的關系:

這里還需要再說明三點:
1、我們使用Hashtable存儲對象,可以直接將Hashtable聲明為static的,也可以將Hashtable聲明為instance的,但是將Hashtable所屬的對象聲明為static的。這里應用了Singleton模式,先將對Hashtable的操作封裝成一個類,然后在這個類上應用Singleton模式,確保了這個類只有一個(這個類所維護的Hashtable實例自然也只有一個了)。很明顯,這個類包含了主要的邏輯,我們將之命名為Cache。
2、使用Hashtable的好處是可以存儲任何類型的對象,缺點是喪失了類型安全。有時候我們可能會想使用一個泛型集合類來取代Hashtable,比如Dictionary<T key, T value>。所以這里又引入了Strategy模式,創建了一個ICacheStrategy接口,這個接口包括三個方法,分別用于添加、獲取、刪除對象。
3、用Xpath獲取結點時,可以是基于當前結點的相對路徑;也可以是基于根結點的絕對路徑。在本文的范例程序中,使用的是絕對路徑,顯然這樣更加方便一些。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肇源县| 赫章县| 集贤县| 开封县| 东乌| 江永县| 二连浩特市| 紫金县| 莱西市| 思南县| 龙川县| 荣成市| 博罗县| 霍邱县| 来安县| 泗水县| 双江| 林甸县| 舒城县| 沾益县| 东港市| 中江县| 天水市| 溆浦县| 新龙县| 腾冲县| 阳曲县| 海伦市| 阳信县| 辽宁省| 永济市| 富川| 肃南| 永新县| 呼伦贝尔市| 峡江县| 成武县| 宁德市| 广东省| 行唐县| 黔南|